AIM: To create violin plots that compare the actual notified cases vs the expected cases in each age group in the 30 high burden countries
Loading the libraries and the data for 2019
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
── Attaching packages ──────────────────────────────────────────── tidyverse 1.3.1 ──
✓ ggplot2 3.3.5 ✓ purrr 0.3.4
✓ tibble 3.1.3 ✓ dplyr 1.0.7
✓ tidyr 1.1.3 ✓ stringr 1.4.0
✓ readr 2.0.1 ✓ forcats 0.5.1
── Conflicts ─────────────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
library(dplyr)
library(magrittr)
Attaching package: ‘magrittr’
The following object is masked from ‘package:purrr’:
set_names
The following object is masked from ‘package:tidyr’:
extract
setwd("~/Desktop/AFP/Original Data")
Warning: The working directory was changed to /Users/Lasith/Desktop/AFP/Original Data inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
estimate_2019 <- read_csv("TBburden.csv")
Rows: 7298 Columns: 13
── Column specification ─────────────────────────────────────────────────────────────
Delimiter: ","
chr (9): country, iso2, iso3, iso_numeric, measure, unit, age_group, sex, risk_fa...
dbl (4): year, best, lo, hi
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
cases_2019 <- read_csv("TBnotif.csv")
Rows: 8492 Columns: 177
── Column specification ─────────────────────────────────────────────────────────────
Delimiter: ","
chr (5): country, iso2, iso3, iso_numeric, g_whoregion
dbl (172): year, new_sp, new_sn, new_su, new_ep, new_oth, ret_rel, ret_taf, ret_t...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
estimate_2019 %<>% filter(risk_factor == "all")
estimate_2019 %<>% filter(sex != "a")
estimate_2019 <- estimate_2019[, c(1,3,8,9,11,12,13)]
high_estimate <- estimate_2019[estimate_2019$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "India", "Indonesia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
est19_04 <- filter(high_estimate, age_group == "0-4")
est19_514 <- filter(high_estimate, age_group == "5-14")
est19_014 <- filter(high_estimate, age_group == "0-14")
est19_15plus <- filter(high_estimate, age_group == "15plus")
piv19_04 <- pivot_wider(est19_04, names_from = "sex", values_from = c("best", "lo", "hi"))
piv19_04 <- piv19_04[, c(1,2, 5, 7, 9, 4, 6, 8)]
piv19_514 <- pivot_wider(est19_514, names_from = "sex", values_from = c("best", "lo", "hi"))
piv19_514 <- piv19_514[, c(1,2, 5, 7, 9, 4, 6, 8)]
piv19_014 <- pivot_wider(est19_014, names_from = "sex", values_from = c("best", "lo", "hi"))
piv19_014 <- piv19_014[, c(1,2, 5, 7, 9, 4, 6, 8)]
piv19_15plus <- pivot_wider(est19_15plus, names_from = "sex", values_from = c("best", "lo", "hi"))
piv19_15plus <- piv19_15plus[, c(1,2, 5, 7, 9, 4, 6, 8)]
Sorting the notificaiton data for 2019
cases_2019 %<>% filter(year == 2019)
casefilter_2019 <- cases_2019[, c(1,3,5, 100, 103, 104, 113, 115, 118, 119, 128)]
high_case2019 <- casefilter_2019[casefilter_2019$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "India", "Indonesia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
Combining each data frame
violin19_04 <- cbind(piv19_04, high_case2019$newrel_m04, high_case2019$newrel_f04)
colnames(violin19_04)[colnames(violin19_04) == "high_case2019$newrel_m04"] <- "notif_m04"
colnames(violin19_04)[colnames(violin19_04) == "high_case2019$newrel_f04"] <- "notif_f04"
violin19_514 <- cbind(piv19_514, high_case2019$newrel_m514, high_case2019$newrel_f514)
colnames(violin19_514)[colnames(violin19_514) == "high_case2019$newrel_m514"] <- "notif_m514"
colnames(violin19_514)[colnames(violin19_514) == "high_case2019$newrel_f514"] <- "notif_f514"
violin19_014 <- cbind(piv19_014, high_case2019$newrel_m014, high_case2019$newrel_f014)
colnames(violin19_014)[colnames(violin19_014) == "high_case2019$newrel_m014"] <- "notif_m014"
colnames(violin19_014)[colnames(violin19_014) == "high_case2019$newrel_f014"] <- "notif_f014"
violin19_15plus <- cbind(piv19_15plus, high_case2019$newrel_m15plus, high_case2019$newrel_f15plus)
colnames(violin19_15plus)[colnames(violin19_15plus) == "high_case2019$newrel_m15plus"] <- "notif_m15plus"
colnames(violin19_15plus)[colnames(violin19_15plus) == "high_case2019$newrel_f15plus"] <- "notif_f15plus"
Creating boxplots
sub_m04 <- violin19_04[, c(1, 3, 4, 5)]
subpiv_m04 <- pivot_longer(sub_m04, cols = c("best_m", "lo_m", "hi_m"), names_to = "est_m04")
subpiv_m04 <- subpiv_m04[, c(1,3)]
subnot_m04 <- violin19_04[, c(1,9)]
list_m04 <- as.vector(violin19_04$notif_m04)
box_m04 <- boxplot(value ~ country, subpiv_m04, ylab = NULL, horizontal = TRUE, las = 1, cex.names = 0.3, par(mar = c(1, 11, 2, 2)))
points(x = list_m04,
y = 1:30,
col = "red",
pch = 16,)

Creating boxplots and excluding Indonesia and India for 0-4 years
iisub_m04 <- violin19_04[, c(1, 3, 4, 5)]
iisub_m04 %<>% filter(country != c("India", "Indonesia"))
iisubpiv_m04 <- pivot_longer(iisub_m04, cols = c("best_m", "lo_m", "hi_m"), names_to = "est_m04")
iisubpiv_m04 <- iisubpiv_m04[, c(1,3)]
iisubnot_m04 <- violin19_04[, c(1,9)]
iisubnot_m04 %<>% filter(country != c("India", "Indonesia"))
box_m04 <- boxplot(value ~ country, iisubpiv_m04, horizontal = TRUE, las = 1, cex.names = 0.1)
points(x = iisubnot_m04$notif_m04,
y = 1:28,
col = "red",
pch = 16)

iisub_f04 <- violin19_04[, c(1, 6:8)]
iisub_f04 %<>% filter(country != c("India", "Indonesia"))
iisubpiv_f04 <- pivot_longer(iisub_f04, cols = c("best_f", "lo_f", "hi_f"), names_to = "est_f04")
iisubpiv_f04 <- iisubpiv_f04[, c(1,3)]
iisubnot_f04 <- violin19_04[, c(1,10)]
iisubnot_f04 %<>% filter(country != c("India", "Indonesia"))
box_f04 <- boxplot(value ~ country, iisubpiv_f04, horizontal = TRUE, las = 1, cex.names = 0.1)
points(x = iisubnot_f04$notif_f04,
y = 1:28,
col = "red",
pch = 16)

NA
NA
Creating box plots excluding India and Indonesia for 0-14 years
iisub_m014 <- violin19_014[, c(1, 3, 4, 5)]
iisub_m014 %<>% filter(country != c("India", "Indonesia"))
iisubpiv_m014 <- pivot_longer(iisub_m014, cols = c("best_m", "lo_m", "hi_m"), names_to = "est_m014")
iisubpiv_m014 <- iisubpiv_m014[, c(1,3)]
iisubnot_m014 <- violin19_014[, c(1,9)]
iisubnot_m014 %<>% filter(country != c("India", "Indonesia"))
box_m014 <- boxplot(value ~ country, iisubpiv_m014, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = iisubnot_m014$notif_m014,
y = 1:28,
col = "red",
pch = 16)

iisub_f014 <- violin19_014[, c(1, 6:8)]
iisub_f014 %<>% filter(country != c("India", "Indonesia"))
iisubpiv_f014 <- pivot_longer(iisub_f014, cols = c("best_f", "lo_f", "hi_f"), names_to = "est_f014")
iisubpiv_f014 <- iisubpiv_f014[, c(1,3)]
iisubnot_f014 <- violin19_014[, c(1,10)]
iisubnot_f014 %<>% filter(country != c("India", "Indonesia"))
box_f014 <- boxplot(value ~ country, iisubpiv_f014, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = iisubnot_f014$notif_f014,
y = 1:28,
col = "red",
pch = 16)

Creating box plots for 15plus years
iisub_m15plus <- violin19_15plus[, c(1, 3, 4, 5)]
iisub_m15plus %<>% filter(country != c("India", "Indonesia"))
iisubpiv_m15plus <- pivot_longer(iisub_m15plus, cols = c("best_m", "lo_m", "hi_m"), names_to = "est_m15plus")
iisubpiv_m15plus <- iisubpiv_m15plus[, c(1,3)]
iisubnot_m15plus <- violin19_15plus[, c(1,9)]
iisubnot_m15plus %<>% filter(country != c("India", "Indonesia"))
box_m15plus <- boxplot(value ~ country, iisubpiv_m15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = iisubnot_m15plus$notif_m15plus,
y = 1:28,
col = "red",
pch = 16)

iisub_f15plus <- violin19_15plus[, c(1, 6:8)]
iisub_f15plus %<>% filter(country != c("India", "Indonesia"))
iisubpiv_f15plus <- pivot_longer(iisub_f15plus, cols = c("best_f", "lo_f", "hi_f"), names_to = "est_f04")
iisubpiv_f15plus <- iisubpiv_f15plus[, c(1,3)]
iisubnot_f15plus <- violin19_15plus[, c(1,10)]
iisubnot_f15plus %<>% filter(country != c("India", "Indonesia"))
box_f15plus <- boxplot(value ~ country, iisubpiv_f15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = iisubnot_f15plus$notif_f15plus,
y = 1:28,
col = "red",
pch = 16)

Repeating same data analysis for 2020
setwd("~/Desktop/AFP/modV3/data")
burden_2020 <- read_csv("TB_burden_2020.csv")
Rows: 7277 Columns: 13
── Column specification ─────────────────────────────────────────────────────────────
Delimiter: ","
chr (9): country, iso2, iso3, iso_numeric, measure, unit, age_group, sex, risk_fa...
dbl (4): year, best, lo, hi
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
notif_2020 <- read_csv("TB_notifications.csv")
Warning: One or more parsing issues, see `problems()` for details
Rows: 8707 Columns: 198
── Column specification ─────────────────────────────────────────────────────────────
Delimiter: ","
chr (5): country, iso2, iso3, iso_numeric, g_whoregion
dbl (191): year, new_sp, new_sn, new_su, new_ep, new_oth, ret_rel, ret_taf, ret_t...
lgl (2): hiv_all_tpt_completed, hiv_all_tpt_started
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
burden_clean <- filter(burden_2020, risk_factor == "all")
burden_clean %<>% filter(sex != "a")
burden20_04 <- filter(burden_clean, age_group == "0-4")
burden20_514 <- filter(burden_clean, age_group == "5-14")
burden20_014 <- filter(burden_clean, age_group == "0-14")
burden20_15plus <- filter(burden_clean, age_group == "15plus")
burden20_04 <- burden20_04[, c(1,3,9,11,12,13)]
burden20_514 <- burden20_514[, c(1,3,9,11,12,13)]
burden20_014 <- burden20_014[, c(1,3,9,11,12,13)]
burden20_15plus <- burden20_15plus[, c(1,3,9,11,12,13)]
male20_04 <- filter(burden20_04, sex == "m")
female20_04 <- filter(burden20_04, sex == "f")
male20_514 <- filter(burden20_514, sex == "m")
female20_514 <- filter(burden20_514, sex == "f")
male20_014 <- filter(burden20_014, sex == "m")
female20_014 <- filter(burden20_014, sex == "f")
male20_15plus <- filter(burden20_15plus, sex == "m")
female20_15plus <- filter(burden20_15plus, sex == "f")
#Pivoted tables of estimates for creation of bar plots
pivmale_04 <- pivot_longer(male20_04, cols = c("best", "lo", "hi"), names_to = "est")
pivmale_04 <- pivmale_04[, c(1,4)]
pivfemale_04 <- pivot_longer(female20_04, cols = c("best", "lo", "hi"), names_to = "est")
pivfemale_04 <- pivfemale_04[, c(1,4)]
pivmale_514 <- pivot_longer(male20_514, cols = c("best", "lo", "hi"), names_to = "est")
pivmale_514 <- pivmale_514[, c(1,4)]
pivfemale_514 <- pivot_longer(female20_514, cols = c("best", "lo", "hi"), names_to = "est")
pivfemale_514 <- pivfemale_514[, c(1,4)]
pivmale_014 <- pivot_longer(male20_014, cols = c("best", "lo", "hi"), names_to = "est")
pivmale_014 <- pivmale_014[, c(1,4)]
pivfemale_014 <- pivot_longer(female20_014, cols = c("best", "lo", "hi"), names_to = "est")
pivfemale_014 <- pivfemale_014[, c(1,4)]
pivmale_15plus <- pivot_longer(male20_15plus, cols = c("best", "lo", "hi"), names_to = "est")
pivmale_15plus <- pivmale_15plus[, c(1,4)]
pivfemale_15plus <- pivot_longer(female20_15plus, cols = c("best", "lo", "hi"), names_to = "est")
pivfemale_15plus <- pivfemale_15plus[, c(1,4)]
#Extracting the notification data for 2020 to add to the bar plot
notif_2020 %<>% filter(year == 2020)
comboM20_04 <- merge(male20_04, notif_2020[, c(3, 100)], by = "iso3")
comboM20_514 <- merge(male20_514, notif_2020[, c(3, 103)], by = "iso3")
comboM20_014 <- merge(male20_014, notif_2020[, c(3, 104)], by = "iso3")
comboM20_15plus <- merge(male20_15plus, notif_2020[, c(3, 113)], by = "iso3")
comboF20_04 <- merge(female20_04, notif_2020[, c(3, 115)], by = "iso3")
comboF20_514 <- merge(female20_514, notif_2020[, c(3, 118)], by = "iso3")
comboF20_014 <- merge(female20_014, notif_2020[, c(3, 119)], by = "iso3")
comboF20_15plus <- merge(female20_15plus, notif_2020[, c(3, 128)], by = "iso3")
Isolating the data for high burden countries excluding India and Indonesia
ii_2020_m04 <- comboM20_04[comboM20_04$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
ii_2020_f04 <- comboF20_04[comboF20_04$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
ii_2020_m514 <- comboM20_514[comboM20_514$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
ii_2020_f514 <- comboF20_514[comboF20_514$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
ii_2020_m014 <- comboM20_014[comboM20_014$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
ii_2020_f014 <- comboF20_014[comboF20_014$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
ii_2020_m15plus <- comboM20_15plus[comboM20_15plus$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
ii_2020_f15plus <- comboF20_15plus[comboF20_15plus$country %in% c("Angola", "Bangladesh", "Brazil", "China", "Democratic People's Republic of Korea", "Democratic Republic of the Congo", "Ethiopia", "Kenya", "Mozambique", "Myanmar", "Nigeria", "Pakistan", "Philippines", "Russian Federation", "South Africa", "Thailand", "United Republic of Tanzania", "Viet Nam", "Cambodia", "Central African Republic", "Congo", "Lesotho", "Liberia", "Namibia", "Papua New Guinea", "Sierra Leone", "Zambia", "Zimbabwe"), ]
Prepping data for box plots
topiv_m04 <- ii_2020_m04[, c(2,4:6)]
pivved_m04 <- pivot_longer(topiv_m04, cols = c("best", "lo", "hi"), names_to = "est")
pivved_m04 <- pivved_m04[, c(1,3)]
topiv_f04 <- ii_2020_f04[, c(2,4:6)]
pivved_f04 <- pivot_longer(topiv_f04, cols = c("best", "lo", "hi"), names_to = "est")
pivved_f04 <- pivved_f04[, c(1,3)]
topiv_m514 <- ii_2020_m514[, c(2,4:6)]
pivved_m514 <- pivot_longer(topiv_m514, cols = c("best", "lo", "hi"), names_to = "est")
pivved_m514 <- pivved_m514[, c(1,3)]
topiv_f514 <- ii_2020_f514[, c(2,4:6)]
pivved_f514 <- pivot_longer(topiv_f514, cols = c("best", "lo", "hi"), names_to = "est")
pivved_f514 <- pivved_f514[, c(1,3)]
topiv_m014 <- ii_2020_m014[, c(2,4:6)]
pivved_m014 <- pivot_longer(topiv_m014, cols = c("best", "lo", "hi"), names_to = "est")
pivved_m014 <- pivved_m014[, c(1,3)]
topiv_f014 <- ii_2020_f014[, c(2,4:6)]
pivved_f014 <- pivot_longer(topiv_f014, cols = c("best", "lo", "hi"), names_to = "est")
pivved_f014 <- pivved_f014[, c(1,3)]
topiv_m15plus <- ii_2020_m15plus[, c(2,4:6)]
pivved_m15plus <- pivot_longer(topiv_m15plus, cols = c("best", "lo", "hi"), names_to = "est")
pivved_m15plus <- pivved_m15plus[, c(1,3)]
topiv_f15plus <- ii_2020_f15plus[, c(2,4:6)]
pivved_f15plus <- pivot_longer(topiv_f15plus, cols = c("best", "lo", "hi"), names_to = "est")
pivved_f15plus <- pivved_f15plus[, c(1,3)]
Creating box plots for high burden countries excluding
box20_m04 <- boxplot(value ~ country, pivved_m04, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_m04 <- ii_2020_m04[order(ii_2020_m04$country), ]
points(x = ii_2020_m04$newrel_m04,
y = 1:28,
col = "red",
pch = 16)

box20_f04 <- boxplot(value ~ country, pivved_f04, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_f04 <- ii_2020_f04[order(ii_2020_f04$country), ]
points(x = ii_2020_f04$newrel_f04,
y = 1:28,
col = "red",
pch = 16)

box20_m514 <- boxplot(value ~ country, pivved_m514, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_m514 <- ii_2020_m514[order(ii_2020_m514$country), ]
points(x = ii_2020_m514$newrel_m514,
y = 1:28,
col = "red",
pch = 16)

box20_f514 <- boxplot(value ~ country, pivved_f514, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_f514 <- ii_2020_f514[order(ii_2020_f514$country), ]
points(x = ii_2020_f514$newrel_f514,
y = 1:28,
col = "red",
pch = 16)

box20_m014 <- boxplot(value ~ country, pivved_m014, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_m014 <- ii_2020_m014[order(ii_2020_m014$country), ]
points(x = ii_2020_m014$newrel_m014,
y = 1:28,
col = "red",
pch = 16)

box20_f014 <- boxplot(value ~ country, pivved_f014, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_f014 <- ii_2020_f014[order(ii_2020_f014$country), ]
points(x = ii_2020_f014$newrel_f014,
y = 1:28,
col = "red",
pch = 16)

box20_m15plus <- boxplot(value ~ country, pivved_m15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_m15plus <- ii_2020_m15plus[order(ii_2020_m15plus$country), ]
points(x = ii_2020_m15plus$newrel_m15plus,
y = 1:28,
col = "red",
pch = 16)

box20_f15plus <- boxplot(value ~ country, pivved_f15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
ii_2020_f15plus <- ii_2020_f15plus[order(ii_2020_f15plus$country), ]
points(x = ii_2020_f15plus$newrel_f15plus,
y = 1:28,
col = "red",
pch = 16)

Performing same analysis by continent starting with 2019 data
est19_04 <- filter(estimate_2019, age_group == "0-4")
est19_514 <- filter(estimate_2019, age_group == "5-14")
est19_014 <- filter(estimate_2019, age_group == "0-14")
est19_15plus <- filter(estimate_2019, age_group == "15plus")
estM19_04 <- filter(est19_04, sex == "m")
estF19_04 <- filter(est19_04, sex == "f")
estM19_514 <- filter(est19_514, sex == "m")
estF19_514 <- filter(est19_514, sex == "f")
estM19_014 <- filter(est19_014, sex == "m")
estF19_014 <- filter(est19_014, sex == "f")
estM19_15plus <- filter(est19_15plus, sex == "m")
estF19_15plus <- filter(est19_15plus, sex == "f")
estM19_04 <- estM19_04[, -c(3,4)]
estF19_04 <- estF19_04[, -c(3,4)]
estM19_514 <- estM19_514[, -c(3,4)]
estF19_514 <- estF19_514[, -c(3,4)]
estM19_014 <- estM19_014[, -c(3,4)]
estF19_014 <- estF19_014[, -c(3,4)]
estM19_15plus <- estM19_15plus[, -c(3,4)]
estF19_15plus <- estF19_15plus[, -c(3,4)]
###Adding in the case notification data for 2019
tot_19_m04 <- merge(estM19_04, casefilter_2019[,c(1:4)], by = c("country", "iso3"))
tot_19_m04 <- tot_19_m04[,c(1,2,6,3:5, 7)]
colnames(tot_19_m04)[colnames(tot_19_m04) == "newrel_m04"] <- "cases"
tot_19_f04 <- merge(estF19_04, casefilter_2019[,c(1:3, 8)], by = c("country", "iso3"))
tot_19_f04 <- tot_19_f04[,c(1,2,6,3:5, 7)]
colnames(tot_19_f04)[colnames(tot_19_f04) == "newrel_f04"] <- "cases"
tot_19_m514 <- merge(estM19_514, casefilter_2019[,c(1:3, 5)], by = c("country", "iso3"))
tot_19_m514 <- tot_19_m514[,c(1,2,6,3:5, 7)]
colnames(tot_19_m514)[colnames(tot_19_m514) == "newrel_m514"] <- "cases"
tot_19_f514 <- merge(estF19_514, casefilter_2019[,c(1:3, 9)], by = c("country", "iso3"))
tot_19_f514 <- tot_19_f514[,c(1,2,6,3:5, 7)]
colnames(tot_19_f514)[colnames(tot_19_f514) == "newrel_f514"] <- "cases"
tot_19_m014 <- merge(estM19_014, casefilter_2019[,c(1:3, 6)], by = c("country", "iso3"))
tot_19_m014 <- tot_19_m014[,c(1,2,6,3:5, 7)]
colnames(tot_19_m014)[colnames(tot_19_m014) == "newrel_m014"] <- "cases"
tot_19_f014 <- merge(estF19_014, casefilter_2019[,c(1:3, 10)], by = c("country", "iso3"))
tot_19_f014 <- tot_19_f014[,c(1,2,6,3:5, 7)]
colnames(tot_19_f014)[colnames(tot_19_f014) == "newrel_f014"] <- "cases"
tot_19_m15plus <- merge(estM19_15plus, casefilter_2019[,c(1:3, 7)], by = c("country", "iso3"))
tot_19_m15plus <- tot_19_m15plus[,c(1,2,6,3:5, 7)]
colnames(tot_19_m15plus)[colnames(tot_19_m15plus) == "newrel_m15plus"] <- "cases"
tot_19_f15plus <- merge(estF19_15plus, casefilter_2019[,c(1:3, 11)], by = c("country", "iso3"))
tot_19_f15plus <- tot_19_f15plus[,c(1,2,6,3:5, 7)]
colnames(tot_19_f15plus)[colnames(tot_19_f15plus) == "newrel_f15plus"] <- "cases"
##Extracting information percontinent
sum_best_m04 <- tot_19_m04 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_m04 <- tot_19_m04 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_m04 <- tot_19_m04 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_m04 <- tot_19_m04 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_m04 <- cbind(sum_best_m04, sum_lo_m04$total, sum_hi_m04$total, sum_cases_m04$total)
colnames(merge19_m04) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum_best_f04 <- tot_19_f04 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_f04 <- tot_19_f04 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_f04 <- tot_19_f04 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_f04 <- tot_19_f04 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_f04 <- cbind(sum_best_f04, sum_lo_f04$total, sum_hi_f04$total, sum_cases_f04$total)
colnames(merge19_f04) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum_best_m014 <- tot_19_m014 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_m014 <- tot_19_m014 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_m014 <- tot_19_m014 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_m014 <- tot_19_m014 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_m014 <- cbind(sum_best_m014, sum_lo_m014$total, sum_hi_m014$total, sum_cases_m014$total)
colnames(merge19_m014) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum_best_f014 <- tot_19_f014 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_f014 <- tot_19_f014 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_f014 <- tot_19_f014 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_f014 <- tot_19_f014 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_f014 <- cbind(sum_best_f014, sum_lo_f014$total, sum_hi_f014$total, sum_cases_f014$total)
colnames(merge19_f014) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum_best_m514 <- tot_19_m514 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_m514 <- tot_19_m514 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_m514 <- tot_19_m514 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_m514 <- tot_19_m514 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_m514 <- cbind(sum_best_m514, sum_lo_m514$total, sum_hi_m514$total, sum_cases_m514$total)
colnames(merge19_m514) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum_best_f514 <- tot_19_f514 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_f514 <- tot_19_f514 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_f514 <- tot_19_f514 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_f514 <- tot_19_f514 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_f514 <- cbind(sum_best_f514, sum_lo_f514$total, sum_hi_f514$total, sum_cases_f514$total)
colnames(merge19_f514) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum_best_m15plus <- tot_19_m15plus %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_m15plus <- tot_19_m15plus %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_m15plus <- tot_19_m15plus %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_m15plus <- tot_19_m15plus %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_m15plus <- cbind(sum_best_m15plus, sum_lo_m15plus$total, sum_hi_m15plus$total, sum_cases_m15plus$total)
colnames(merge19_m15plus) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum_best_f15plus <- tot_19_f15plus %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum_lo_f15plus <- tot_19_f15plus %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum_hi_f15plus <- tot_19_f15plus %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum_cases_f15plus <- tot_19_f15plus %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge19_f15plus <- cbind(sum_best_f15plus, sum_lo_f15plus$total, sum_hi_f15plus$total, sum_cases_f15plus$total)
colnames(merge19_f15plus) <- c("g_whoregion", "best", "lo", "hi", "cases")
Plotting boxplots for continent data for 2019
pivtot_m04 <- pivot_longer(merge19_m04, cols = c("best", "lo", "hi"), names_to = "est")
box19_m04 <- boxplot(value ~ g_whoregion, pivtot_m04, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_m04$cases,
y = 1:6,
col = "red",
pch = 16)

pivtot_f04 <- pivot_longer(merge19_f04, cols = c("best", "lo", "hi"), names_to = "est")
box19_f04 <- boxplot(value ~ g_whoregion, pivtot_f04, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_f04$cases,
y = 1:6,
col = "red",
pch = 16)

pivtot_m514 <- pivot_longer(merge19_m514, cols = c("best", "lo", "hi"), names_to = "est")
box19_m514 <- boxplot(value ~ g_whoregion, pivtot_m514, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_m514$cases,
y = 1:6,
col = "red",
pch = 16)

pivtot_f514 <- pivot_longer(merge19_f514, cols = c("best", "lo", "hi"), names_to = "est")
box19_f514 <- boxplot(value ~ g_whoregion, pivtot_f514, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_f514$cases,
y = 1:6,
col = "red",
pch = 16)

pivtot_m014 <- pivot_longer(merge19_m014, cols = c("best", "lo", "hi"), names_to = "est")
box19_m014 <- boxplot(value ~ g_whoregion, pivtot_m014, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_m014$cases,
y = 1:6,
col = "red",
pch = 16)

pivtot_f014 <- pivot_longer(merge19_f014, cols = c("best", "lo", "hi"), names_to = "est")
box19_f014 <- boxplot(value ~ g_whoregion, pivtot_f014, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_f014$cases,
y = 1:6,
col = "red",
pch = 16)

pivtot_m15plus <- pivot_longer(merge19_m15plus, cols = c("best", "lo", "hi"), names_to = "est")
box19_m15plus <- boxplot(value ~ g_whoregion, pivtot_m15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_m15plus$cases,
y = 1:6,
col = "red",
pch = 16)

pivtot_f15plus <- pivot_longer(merge19_f15plus, cols = c("best", "lo", "hi"), names_to = "est")
box19_f15plus <- boxplot(value ~ g_whoregion, pivtot_f15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge19_f15plus$cases,
y = 1:6,
col = "red",
pch = 16)

Performing continental analysis with 2020 data
#Adding g_whoregion to the combined data frames
regionM20_04 <- merge(male20_04, notif_2020[, c(3, 5,100)], by = "iso3")
regionM20_514 <- merge(male20_514, notif_2020[, c(3, 5, 103)], by = "iso3")
regionM20_014 <- merge(male20_014, notif_2020[, c(3, 5, 104)], by = "iso3")
regionM20_15plus <- merge(male20_15plus, notif_2020[, c(3, 5, 113)], by = "iso3")
regionF20_04 <- merge(female20_04, notif_2020[, c(3, 5, 115)], by = "iso3")
regionF20_514 <- merge(female20_514, notif_2020[, c(3, 5, 118)], by = "iso3")
regionF20_014 <- merge(female20_014, notif_2020[, c(3, 5, 119)], by = "iso3")
regionF20_15plus <- merge(female20_15plus, notif_2020[, c(3, 5, 128)], by = "iso3")
colnames(regionM20_04)[colnames(regionM20_04) == "newrel_m04"] <- "cases"
colnames(regionM20_514)[colnames(regionM20_514) == "newrel_m514"] <- "cases"
colnames(regionM20_014)[colnames(regionM20_014) == "newrel_m014"] <- "cases"
colnames(regionM20_15plus)[colnames(regionM20_15plus) == "newrel_m15plus"] <- "cases"
colnames(regionF20_04)[colnames(regionF20_04) == "newrel_f04"] <- "cases"
colnames(regionF20_514)[colnames(regionF20_514) == "newrel_f514"] <- "cases"
colnames(regionF20_014)[colnames(regionF20_014) == "newrel_f014"] <- "cases"
colnames(regionF20_15plus)[colnames(regionF20_15plus) == "newrel_f15plus"] <- "cases"
#Creating data for the boxplots
sum20_best_m04 <- regionM20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_m04 <- regionM20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_m04 <- regionM20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_m04 <- regionM20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_m04 <- cbind(sum20_best_m04, sum20_lo_m04$total, sum20_hi_m04$total, sum20_cases_m04$total)
colnames(merge20_m04) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum20_best_f04 <- regionF20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_f04 <- regionF20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_f04 <- regionF20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_f04 <- regionF20_04 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_f04 <- cbind(sum20_best_f04, sum20_lo_f04$total, sum20_hi_f04$total, sum20_cases_f04$total)
colnames(merge20_f04) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum20_best_m514 <- regionM20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_m514 <- regionM20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_m514 <- regionM20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_m514 <- regionM20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_m514 <- cbind(sum20_best_m514, sum20_lo_m514$total, sum20_hi_m514$total, sum20_cases_m514$total)
colnames(merge20_m514) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum20_best_f514 <- regionF20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_f514 <- regionF20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_f514 <- regionF20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_f514 <- regionF20_514 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_f514 <- cbind(sum20_best_f514, sum20_lo_f514$total, sum20_hi_f514$total, sum20_cases_f514$total)
colnames(merge20_f514) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum20_best_m014 <- regionM20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_m014 <- regionM20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_m014 <- regionM20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_m014 <- regionM20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_m014 <- cbind(sum20_best_m014, sum20_lo_m014$total, sum20_hi_m014$total, sum20_cases_m014$total)
colnames(merge20_m014) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum20_best_f014 <- regionF20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_f014 <- regionF20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_f014 <- regionF20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_f014 <- regionF20_014 %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_f014 <- cbind(sum20_best_f014, sum20_lo_f014$total, sum20_hi_f014$total, sum20_cases_f014$total)
colnames(merge20_f014) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum20_best_m15plus <- regionM20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_m15plus <- regionM20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_m15plus <- regionM20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_m15plus <- regionM20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_m15plus <- cbind(sum20_best_m15plus, sum20_lo_m15plus$total, sum20_hi_m15plus$total, sum20_cases_m15plus$total)
colnames(merge20_m15plus) <- c("g_whoregion", "best", "lo", "hi", "cases")
sum20_best_f15plus <- regionF20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(best))
sum20_lo_f15plus <- regionF20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(lo))
sum20_hi_f15plus <- regionF20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(hi))
sum20_cases_f15plus <- regionF20_15plus %>% group_by(g_whoregion) %>% summarise(total = sum(na.omit(cases)))
merge20_f15plus <- cbind(sum20_best_f15plus, sum20_lo_f15plus$total, sum20_hi_f15plus$total, sum20_cases_f15plus$total)
colnames(merge20_f15plus) <- c("g_whoregion", "best", "lo", "hi", "cases")
#Drawing box plots for 2020
piv20_m04 <- pivot_longer(merge20_m04, cols = c("best", "lo", "hi"), names_to = "est")
box20_m04 <- boxplot(value ~ g_whoregion, piv20_m04, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_m04$cases,
y = 1:6,
col = "red",
pch = 16)

piv20_f04 <- pivot_longer(merge20_f04, cols = c("best", "lo", "hi"), names_to = "est")
box20_f04 <- boxplot(value ~ g_whoregion, piv20_f04, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_f04$cases,
y = 1:6,
col = "red",
pch = 16)

piv20_m514 <- pivot_longer(merge20_m514, cols = c("best", "lo", "hi"), names_to = "est")
box20_m514 <- boxplot(value ~ g_whoregion, piv20_m514, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_m514$cases,
y = 1:6,
col = "red",
pch = 16)

piv20_f514 <- pivot_longer(merge20_f514, cols = c("best", "lo", "hi"), names_to = "est")
box20_f514 <- boxplot(value ~ g_whoregion, piv20_f514, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_f514$cases,
y = 1:6,
col = "red",
pch = 16)

piv20_m014 <- pivot_longer(merge20_m014, cols = c("best", "lo", "hi"), names_to = "est")
box20_m014 <- boxplot(value ~ g_whoregion, piv20_m014, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_m014$cases,
y = 1:6,
col = "red",
pch = 16)

piv20_f014 <- pivot_longer(merge20_f014, cols = c("best", "lo", "hi"), names_to = "est")
box20_f014 <- boxplot(value ~ g_whoregion, piv20_f014, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_f014$cases,
y = 1:6,
col = "red",
pch = 16)

piv20_m15plus <- pivot_longer(merge20_m15plus, cols = c("best", "lo", "hi"), names_to = "est")
box20_m15plus <- boxplot(value ~ g_whoregion, piv20_m15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_m15plus$cases,
y = 1:6,
col = "red",
pch = 16)

piv20_f15plus <- pivot_longer(merge20_f15plus, cols = c("best", "lo", "hi"), names_to = "est")
box20_f15plus <- boxplot(value ~ g_whoregion, piv20_f15plus, horizontal = TRUE, las = 1, cex.names = 0.5)
points(x = merge20_f15plus$cases,
y = 1:6,
col = "red",
pch = 16)

Creating comibned data frame comparing 2019 and 2020 data
#Age 04 side-by-side
sexM <- "male"
merg_m04 <- merge(pivtot_m04, piv20_m04, by = c("g_whoregion", "est"), all.x = TRUE)
colnames(merg_m04) <- c("g_whoregion", "est", "case_2019", "est_2019", "case_2020", "est_2020")
merg_m04 <- cbind(merg_m04, sexM)
colnames(merg_m04)[colnames(merg_m04) == "sexM"] <- "sex"
sexF <- "female"
merg_f04 <- merge(pivtot_f04, piv20_f04, by = c("g_whoregion", "est"), all.x = TRUE)
colnames(merg_f04) <- c("g_whoregion", "est", "case_2019", "est_2019", "case_2020", "est_2020")
merg_f04 <- cbind(merg_f04, sexF)
colnames(merg_f04)[colnames(merg_f04) == "sexF"] <- "sex"
merged_04 <- rbind(merg_m04, merg_f04)
merged_044 <- merged_04[, -c(3,5)]
long_04 <- pivot_longer(merged_044, cols = c("est_2019", "est_2020"))
gg_try04 <- ggplot(long_04, aes(x = g_whoregion, y = value, color = name)) + geom_boxplot() + facet_wrap(~long_04$sex)
#Age 5-14 side-by-side
sexM <- "male"
merg_m514 <- merge(pivtot_m514, piv20_m514, by = c("g_whoregion", "est"), all.x = TRUE)
colnames(merg_m514) <- c("g_whoregion", "est", "case_2019", "est_2019", "case_2020", "est_2020")
merg_m514 <- cbind(merg_m514, sexM)
colnames(merg_m514)[colnames(merg_m514) == "sexM"] <- "sex"
sexF <- "female"
merg_f514 <- merge(pivtot_f514, piv20_f514, by = c("g_whoregion", "est"), all.x = TRUE)
colnames(merg_f514) <- c("g_whoregion", "est", "case_2019", "est_2019", "case_2020", "est_2020")
merg_f514 <- cbind(merg_f514, sexF)
colnames(merg_f514)[colnames(merg_f514) == "sexF"] <- "sex"
merged_514 <- rbind(merg_m514, merg_f514)
merged_5144 <- merged_514[, -c(3,5)]
long_514 <- pivot_longer(merged_5144, cols = c("est_2019", "est_2020"))
gg_try514 <- ggplot(long_514, aes(x = g_whoregion, y = value, color = name)) + geom_boxplot() + facet_wrap(~long_514$sex)
#Age 15 plus side-by-side
sexM <- "male"
merg_m15plus <- merge(pivtot_m15plus, piv20_m15plus, by = c("g_whoregion", "est"), all.x = TRUE)
colnames(merg_m15plus) <- c("g_whoregion", "est", "case_2019", "est_2019", "case_2020", "est_2020")
merg_m15plus <- cbind(merg_m15plus, sexM)
colnames(merg_m15plus)[colnames(merg_m15plus) == "sexM"] <- "sex"
sexF <- "female"
merg_f15plus <- merge(pivtot_f15plus, piv20_f15plus, by = c("g_whoregion", "est"), all.x = TRUE)
colnames(merg_f15plus) <- c("g_whoregion", "est", "case_2019", "est_2019", "case_2020", "est_2020")
merg_f15plus <- cbind(merg_f15plus, sexF)
colnames(merg_f15plus)[colnames(merg_f15plus) == "sexF"] <- "sex"
merged_15plus <- rbind(merg_m15plus, merg_f15plus)
merged_15plus4 <- merged_15plus[, -c(3,5)]
long_15plus <- pivot_longer(merged_15plus4, cols = c("est_2019", "est_2020"))
gg_try15plus <- ggplot(long_15plus, aes(x = g_whoregion, y = value, color = name)) + geom_boxplot() + facet_wrap(~long_15plus$sex)
Creating data frame to overlay the case data for each graph
cases_04 <- merged_04[, -c(2, 4,6)]
case_ready04 <- pivot_longer(cases_04, cols = c("case_2019", "case_2020"))
no_dups04 <- case_ready04[!duplicated(case_ready04),]
gg_try04 <- ggplot(long_04, aes(x = g_whoregion, y = value, color = name)) + geom_boxplot() + facet_wrap(~long_04$sex)
gg_alone <- ggplot(no_dups04, aes(x = g_whoregion, y = value, color = name)) + geom_point() + facet_wrap(~no_dups04$sex)
gg_try05 <- ggplot(long_04, aes(x = g_whoregion, y = value, color = name)) + geom_boxplot() + geom_point(data = no_dups04, aes(x = g_whoregion, y = value, color = name), inherit.aes = ) + facet_wrap(~long_04$sex)
###Trying again
merged_05 <- merged_04[, -2]
incl_case <- pivot_longer(merged_05, cols = c("est_2019", "est_2020"))
incl_case2 <- pivot_longer(incl_case, cols = c("case_2019", "case_2020"), values_to = "cases", names_repair= "unique")
New names:
* name -> name...3
* name -> name...5
colnames(incl_case2) <- c("g_whoregion", "sex", "est", "est_value", "case", "case_value")
gg_incl04 <- ggplot(incl_case2, aes(x = g_whoregion, y = est_value, color = est)) + geom_boxplot() + geom_point(aes(x = g_whoregion, y = case_value, color = case)) + facet_wrap(~incl_case2$sex) + labs(title = "2019 vs 2020 estimate and notification data for 0-4 yrs")
gg_incl04

##Trying5-14
merged_514_ready <- merged_514[, -2]
incl_case514 <- pivot_longer(merged_514_ready, cols = c("est_2019", "est_2020"))
incl_case5142 <- pivot_longer(incl_case514, cols = c("case_2019", "case_2020"), values_to = "cases", names_repair= "unique")
New names:
* name -> name...3
* name -> name...5
colnames(incl_case5142) <- c("g_whoregion", "sex", "est", "est_value", "case", "case_value")
gg_incl514 <- ggplot(incl_case5142, aes(x = g_whoregion, y = est_value, color = est)) + geom_boxplot() + geom_point(aes(x = g_whoregion, y = case_value, color = case)) + facet_wrap(~incl_case5142$sex) + labs(title = "2019 vs 2020 estimate and notification data for 5-14 yrs")
gg_incl514

#Trying 15plus
merged_15plus_ready <- merged_15plus[, -2]
incl_case15plus <- pivot_longer(merged_15plus_ready, cols = c("est_2019", "est_2020"))
incl_case15plus2 <- pivot_longer(incl_case15plus, cols = c("case_2019", "case_2020"), values_to = "cases", names_repair= "unique")
New names:
* name -> name...3
* name -> name...5
colnames(incl_case15plus2) <- c("g_whoregion", "sex", "est", "est_value", "case", "case_value")
gg_incl15plus <- ggplot(incl_case15plus2, aes(x = g_whoregion, y = est_value, color = est)) + geom_boxplot() + geom_point(aes(x = g_whoregion, y = case_value, color = case)) + facet_wrap(~incl_case15plus2$sex) + labs(title = "2019 vs 2020 estimate and notification data for 15plus yrs")
gg_incl15plus

NA
NA
LS0tCnRpdGxlOiAiQXR0ZW1wdCBhdCBjcmVhdGluZyB2aW9saW4gcGxvdHMgZm9yIDMwIGhpZ2ggYnVyZGVuIGNvdW50cmllcyBmb3IgMjAxOSBhbmQgMjAyMCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKQUlNOiBUbyBjcmVhdGUgdmlvbGluIHBsb3RzIHRoYXQgY29tcGFyZSB0aGUgYWN0dWFsIG5vdGlmaWVkIGNhc2VzIHZzIHRoZSBleHBlY3RlZCBjYXNlcyBpbiBlYWNoIGFnZSBncm91cCBpbiB0aGUgMzAgaGlnaCBidXJkZW4gY291bnRyaWVzIAoKTG9hZGluZyB0aGUgbGlicmFyaWVzIGFuZCB0aGUgZGF0YSBmb3IgMjAxOSAKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KG1hZ3JpdHRyKQpzZXR3ZCgifi9EZXNrdG9wL0FGUC9PcmlnaW5hbCBEYXRhIikKZXN0aW1hdGVfMjAxOSA8LSByZWFkX2NzdigiVEJidXJkZW4uY3N2IikKY2FzZXNfMjAxOSA8LSByZWFkX2NzdigiVEJub3RpZi5jc3YiKQoKZXN0aW1hdGVfMjAxOSAlPD4lIGZpbHRlcihyaXNrX2ZhY3RvciA9PSAiYWxsIikKZXN0aW1hdGVfMjAxOSAlPD4lIGZpbHRlcihzZXggIT0gImEiKQplc3RpbWF0ZV8yMDE5IDwtIGVzdGltYXRlXzIwMTlbLCBjKDEsMyw4LDksMTEsMTIsMTMpXQoKaGlnaF9lc3RpbWF0ZSA8LSBlc3RpbWF0ZV8yMDE5W2VzdGltYXRlXzIwMTkkY291bnRyeSAlaW4lIGMoIkFuZ29sYSIsICJCYW5nbGFkZXNoIiwgIkJyYXppbCIsICJDaGluYSIsICJEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mIEtvcmVhIiwgIkRlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIENvbmdvIiwgIkV0aGlvcGlhIiwgIkluZGlhIiwgIkluZG9uZXNpYSIsICJLZW55YSIsICJNb3phbWJpcXVlIiwgIk15YW5tYXIiLCAiTmlnZXJpYSIsICJQYWtpc3RhbiIsICJQaGlsaXBwaW5lcyIsICJSdXNzaWFuIEZlZGVyYXRpb24iLCAiU291dGggQWZyaWNhIiwgIlRoYWlsYW5kIiwgIlVuaXRlZCBSZXB1YmxpYyBvZiBUYW56YW5pYSIsICJWaWV0IE5hbSIsICJDYW1ib2RpYSIsICJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMiLCAiQ29uZ28iLCAiTGVzb3RobyIsICJMaWJlcmlhIiwgIk5hbWliaWEiLCAiUGFwdWEgTmV3IEd1aW5lYSIsICJTaWVycmEgTGVvbmUiLCAiWmFtYmlhIiwgIlppbWJhYndlIiksIF0KCmVzdDE5XzA0IDwtIGZpbHRlcihoaWdoX2VzdGltYXRlLCBhZ2VfZ3JvdXAgPT0gIjAtNCIpCmVzdDE5XzUxNCA8LSBmaWx0ZXIoaGlnaF9lc3RpbWF0ZSwgYWdlX2dyb3VwID09ICI1LTE0IikKZXN0MTlfMDE0IDwtIGZpbHRlcihoaWdoX2VzdGltYXRlLCBhZ2VfZ3JvdXAgPT0gIjAtMTQiKQplc3QxOV8xNXBsdXMgPC0gZmlsdGVyKGhpZ2hfZXN0aW1hdGUsIGFnZV9ncm91cCA9PSAiMTVwbHVzIikKCnBpdjE5XzA0IDwtIHBpdm90X3dpZGVyKGVzdDE5XzA0LCBuYW1lc19mcm9tID0gInNleCIsIHZhbHVlc19mcm9tID0gYygiYmVzdCIsICJsbyIsICJoaSIpKQpwaXYxOV8wNCA8LSBwaXYxOV8wNFssIGMoMSwyLCA1LCA3LCA5LCA0LCA2LCA4KV0KCnBpdjE5XzUxNCA8LSBwaXZvdF93aWRlcihlc3QxOV81MTQsIG5hbWVzX2Zyb20gPSAic2V4IiwgdmFsdWVzX2Zyb20gPSBjKCJiZXN0IiwgImxvIiwgImhpIikpCnBpdjE5XzUxNCA8LSBwaXYxOV81MTRbLCBjKDEsMiwgNSwgNywgOSwgNCwgNiwgOCldCgpwaXYxOV8wMTQgPC0gcGl2b3Rfd2lkZXIoZXN0MTlfMDE0LCBuYW1lc19mcm9tID0gInNleCIsIHZhbHVlc19mcm9tID0gYygiYmVzdCIsICJsbyIsICJoaSIpKQpwaXYxOV8wMTQgPC0gcGl2MTlfMDE0WywgYygxLDIsIDUsIDcsIDksIDQsIDYsIDgpXQoKcGl2MTlfMTVwbHVzIDwtIHBpdm90X3dpZGVyKGVzdDE5XzE1cGx1cywgbmFtZXNfZnJvbSA9ICJzZXgiLCB2YWx1ZXNfZnJvbSA9IGMoImJlc3QiLCAibG8iLCAiaGkiKSkKcGl2MTlfMTVwbHVzIDwtIHBpdjE5XzE1cGx1c1ssIGMoMSwyLCA1LCA3LCA5LCA0LCA2LCA4KV0KCgpgYGAKClNvcnRpbmcgdGhlIG5vdGlmaWNhaXRvbiBkYXRhIGZvciAyMDE5IAoKYGBge3J9CmNhc2VzXzIwMTkgJTw+JSBmaWx0ZXIoeWVhciA9PSAyMDE5KQpjYXNlZmlsdGVyXzIwMTkgPC0gY2FzZXNfMjAxOVssIGMoMSwzLDUsIDEwMCwgMTAzLCAxMDQsIDExMywgMTE1LCAxMTgsIDExOSwgMTI4KV0KCmhpZ2hfY2FzZTIwMTkgPC0gY2FzZWZpbHRlcl8yMDE5W2Nhc2VmaWx0ZXJfMjAxOSRjb3VudHJ5ICVpbiUgYygiQW5nb2xhIiwgIkJhbmdsYWRlc2giLCAiQnJhemlsIiwgIkNoaW5hIiwgIkRlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2YgS29yZWEiLCAiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ28iLCAiRXRoaW9waWEiLCAiSW5kaWEiLCAiSW5kb25lc2lhIiwgIktlbnlhIiwgIk1vemFtYmlxdWUiLCAiTXlhbm1hciIsICJOaWdlcmlhIiwgIlBha2lzdGFuIiwgIlBoaWxpcHBpbmVzIiwgIlJ1c3NpYW4gRmVkZXJhdGlvbiIsICJTb3V0aCBBZnJpY2EiLCAiVGhhaWxhbmQiLCAiVW5pdGVkIFJlcHVibGljIG9mIFRhbnphbmlhIiwgIlZpZXQgTmFtIiwgIkNhbWJvZGlhIiwgIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIsICJDb25nbyIsICJMZXNvdGhvIiwgIkxpYmVyaWEiLCAiTmFtaWJpYSIsICJQYXB1YSBOZXcgR3VpbmVhIiwgIlNpZXJyYSBMZW9uZSIsICJaYW1iaWEiLCAiWmltYmFid2UiKSwgXQoKCmBgYAoKQ29tYmluaW5nIGVhY2ggZGF0YSBmcmFtZSAKCmBgYHtyfQp2aW9saW4xOV8wNCA8LSBjYmluZChwaXYxOV8wNCwgaGlnaF9jYXNlMjAxOSRuZXdyZWxfbTA0LCBoaWdoX2Nhc2UyMDE5JG5ld3JlbF9mMDQpCmNvbG5hbWVzKHZpb2xpbjE5XzA0KVtjb2xuYW1lcyh2aW9saW4xOV8wNCkgPT0gImhpZ2hfY2FzZTIwMTkkbmV3cmVsX20wNCJdIDwtICJub3RpZl9tMDQiCmNvbG5hbWVzKHZpb2xpbjE5XzA0KVtjb2xuYW1lcyh2aW9saW4xOV8wNCkgPT0gImhpZ2hfY2FzZTIwMTkkbmV3cmVsX2YwNCJdIDwtICJub3RpZl9mMDQiCgp2aW9saW4xOV81MTQgPC0gY2JpbmQocGl2MTlfNTE0LCBoaWdoX2Nhc2UyMDE5JG5ld3JlbF9tNTE0LCBoaWdoX2Nhc2UyMDE5JG5ld3JlbF9mNTE0KQpjb2xuYW1lcyh2aW9saW4xOV81MTQpW2NvbG5hbWVzKHZpb2xpbjE5XzUxNCkgPT0gImhpZ2hfY2FzZTIwMTkkbmV3cmVsX201MTQiXSA8LSAibm90aWZfbTUxNCIKY29sbmFtZXModmlvbGluMTlfNTE0KVtjb2xuYW1lcyh2aW9saW4xOV81MTQpID09ICJoaWdoX2Nhc2UyMDE5JG5ld3JlbF9mNTE0Il0gPC0gIm5vdGlmX2Y1MTQiCgp2aW9saW4xOV8wMTQgPC0gY2JpbmQocGl2MTlfMDE0LCBoaWdoX2Nhc2UyMDE5JG5ld3JlbF9tMDE0LCBoaWdoX2Nhc2UyMDE5JG5ld3JlbF9mMDE0KQpjb2xuYW1lcyh2aW9saW4xOV8wMTQpW2NvbG5hbWVzKHZpb2xpbjE5XzAxNCkgPT0gImhpZ2hfY2FzZTIwMTkkbmV3cmVsX20wMTQiXSA8LSAibm90aWZfbTAxNCIKY29sbmFtZXModmlvbGluMTlfMDE0KVtjb2xuYW1lcyh2aW9saW4xOV8wMTQpID09ICJoaWdoX2Nhc2UyMDE5JG5ld3JlbF9mMDE0Il0gPC0gIm5vdGlmX2YwMTQiCgoKdmlvbGluMTlfMTVwbHVzIDwtIGNiaW5kKHBpdjE5XzE1cGx1cywgaGlnaF9jYXNlMjAxOSRuZXdyZWxfbTE1cGx1cywgaGlnaF9jYXNlMjAxOSRuZXdyZWxfZjE1cGx1cykKY29sbmFtZXModmlvbGluMTlfMTVwbHVzKVtjb2xuYW1lcyh2aW9saW4xOV8xNXBsdXMpID09ICJoaWdoX2Nhc2UyMDE5JG5ld3JlbF9tMTVwbHVzIl0gPC0gIm5vdGlmX20xNXBsdXMiCmNvbG5hbWVzKHZpb2xpbjE5XzE1cGx1cylbY29sbmFtZXModmlvbGluMTlfMTVwbHVzKSA9PSAiaGlnaF9jYXNlMjAxOSRuZXdyZWxfZjE1cGx1cyJdIDwtICJub3RpZl9mMTVwbHVzIgoKYGBgCgpDcmVhdGluZyBib3hwbG90cyAKCmBgYHtyfQpzdWJfbTA0IDwtIHZpb2xpbjE5XzA0WywgYygxLCAzLCA0LCA1KV0Kc3VicGl2X20wNCA8LSBwaXZvdF9sb25nZXIoc3ViX20wNCwgY29scyA9IGMoImJlc3RfbSIsICJsb19tIiwgImhpX20iKSwgbmFtZXNfdG8gPSAiZXN0X20wNCIpCnN1YnBpdl9tMDQgPC0gc3VicGl2X20wNFssIGMoMSwzKV0Kc3Vibm90X20wNCA8LSB2aW9saW4xOV8wNFssIGMoMSw5KV0KbGlzdF9tMDQgPC0gYXMudmVjdG9yKHZpb2xpbjE5XzA0JG5vdGlmX20wNCkKCmJveF9tMDQgPC0gYm94cGxvdCh2YWx1ZSB+IGNvdW50cnksIHN1YnBpdl9tMDQsIHlsYWIgPSBOVUxMLCBob3Jpem9udGFsID0gVFJVRSwgbGFzID0gMSwgY2V4Lm5hbWVzID0gMC4zLCBwYXIobWFyID0gYygxLCAxMSwgMiwgMikpKQpwb2ludHMoeCA9IGxpc3RfbTA0LAogICAgICAgeSA9IDE6MzAsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2LCkKCmBgYAoKQ3JlYXRpbmcgYm94cGxvdHMgYW5kIGV4Y2x1ZGluZyBJbmRvbmVzaWEgYW5kIEluZGlhIGZvciAwLTQgeWVhcnMgCgpgYGB7cn0KaWlzdWJfbTA0IDwtIHZpb2xpbjE5XzA0WywgYygxLCAzLCA0LCA1KV0KaWlzdWJfbTA0ICU8PiUgZmlsdGVyKGNvdW50cnkgIT0gYygiSW5kaWEiLCAiSW5kb25lc2lhIikpCmlpc3VicGl2X20wNCA8LSBwaXZvdF9sb25nZXIoaWlzdWJfbTA0LCBjb2xzID0gYygiYmVzdF9tIiwgImxvX20iLCAiaGlfbSIpLCBuYW1lc190byA9ICJlc3RfbTA0IikKaWlzdWJwaXZfbTA0IDwtIGlpc3VicGl2X20wNFssIGMoMSwzKV0KaWlzdWJub3RfbTA0IDwtIHZpb2xpbjE5XzA0WywgYygxLDkpXQppaXN1Ym5vdF9tMDQgJTw+JSBmaWx0ZXIoY291bnRyeSAhPSBjKCJJbmRpYSIsICJJbmRvbmVzaWEiKSkKCmJveF9tMDQgPC0gYm94cGxvdCh2YWx1ZSB+IGNvdW50cnksIGlpc3VicGl2X20wNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuMSkKcG9pbnRzKHggPSBpaXN1Ym5vdF9tMDQkbm90aWZfbTA0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKaWlzdWJfZjA0IDwtIHZpb2xpbjE5XzA0WywgYygxLCA2OjgpXQppaXN1Yl9mMDQgJTw+JSBmaWx0ZXIoY291bnRyeSAhPSBjKCJJbmRpYSIsICJJbmRvbmVzaWEiKSkKaWlzdWJwaXZfZjA0IDwtIHBpdm90X2xvbmdlcihpaXN1Yl9mMDQsIGNvbHMgPSBjKCJiZXN0X2YiLCAibG9fZiIsICJoaV9mIiksIG5hbWVzX3RvID0gImVzdF9mMDQiKQppaXN1YnBpdl9mMDQgPC0gaWlzdWJwaXZfZjA0WywgYygxLDMpXQppaXN1Ym5vdF9mMDQgPC0gdmlvbGluMTlfMDRbLCBjKDEsMTApXQppaXN1Ym5vdF9mMDQgJTw+JSBmaWx0ZXIoY291bnRyeSAhPSBjKCJJbmRpYSIsICJJbmRvbmVzaWEiKSkKCmJveF9mMDQgPC0gYm94cGxvdCh2YWx1ZSB+IGNvdW50cnksIGlpc3VicGl2X2YwNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuMSkKcG9pbnRzKHggPSBpaXN1Ym5vdF9mMDQkbm90aWZfZjA0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKCmBgYApDcmVhdGluZyBib3ggcGxvdHMgZXhjbHVkaW5nIEluZGlhIGFuZCBJbmRvbmVzaWEgZm9yIDAtMTQgeWVhcnMgCgpgYGB7cn0KaWlzdWJfbTAxNCA8LSB2aW9saW4xOV8wMTRbLCBjKDEsIDMsIDQsIDUpXQppaXN1Yl9tMDE0ICU8PiUgZmlsdGVyKGNvdW50cnkgIT0gYygiSW5kaWEiLCAiSW5kb25lc2lhIikpCmlpc3VicGl2X20wMTQgPC0gcGl2b3RfbG9uZ2VyKGlpc3ViX20wMTQsIGNvbHMgPSBjKCJiZXN0X20iLCAibG9fbSIsICJoaV9tIiksIG5hbWVzX3RvID0gImVzdF9tMDE0IikKaWlzdWJwaXZfbTAxNCA8LSBpaXN1YnBpdl9tMDE0WywgYygxLDMpXQppaXN1Ym5vdF9tMDE0IDwtIHZpb2xpbjE5XzAxNFssIGMoMSw5KV0KaWlzdWJub3RfbTAxNCAlPD4lIGZpbHRlcihjb3VudHJ5ICE9IGMoIkluZGlhIiwgIkluZG9uZXNpYSIpKQoKYm94X20wMTQgPC0gYm94cGxvdCh2YWx1ZSB+IGNvdW50cnksIGlpc3VicGl2X20wMTQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gaWlzdWJub3RfbTAxNCRub3RpZl9tMDE0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKaWlzdWJfZjAxNCA8LSB2aW9saW4xOV8wMTRbLCBjKDEsIDY6OCldCmlpc3ViX2YwMTQgJTw+JSBmaWx0ZXIoY291bnRyeSAhPSBjKCJJbmRpYSIsICJJbmRvbmVzaWEiKSkKaWlzdWJwaXZfZjAxNCA8LSBwaXZvdF9sb25nZXIoaWlzdWJfZjAxNCwgY29scyA9IGMoImJlc3RfZiIsICJsb19mIiwgImhpX2YiKSwgbmFtZXNfdG8gPSAiZXN0X2YwMTQiKQppaXN1YnBpdl9mMDE0IDwtIGlpc3VicGl2X2YwMTRbLCBjKDEsMyldCmlpc3Vibm90X2YwMTQgPC0gdmlvbGluMTlfMDE0WywgYygxLDEwKV0KaWlzdWJub3RfZjAxNCAlPD4lIGZpbHRlcihjb3VudHJ5ICE9IGMoIkluZGlhIiwgIkluZG9uZXNpYSIpKQoKYm94X2YwMTQgPC0gYm94cGxvdCh2YWx1ZSB+IGNvdW50cnksIGlpc3VicGl2X2YwMTQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gaWlzdWJub3RfZjAxNCRub3RpZl9mMDE0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQpgYGAKQ3JlYXRpbmcgYm94IHBsb3RzIGZvciAxNXBsdXMgeWVhcnMgCgpgYGB7cn0KaWlzdWJfbTE1cGx1cyA8LSB2aW9saW4xOV8xNXBsdXNbLCBjKDEsIDMsIDQsIDUpXQppaXN1Yl9tMTVwbHVzICU8PiUgZmlsdGVyKGNvdW50cnkgIT0gYygiSW5kaWEiLCAiSW5kb25lc2lhIikpCmlpc3VicGl2X20xNXBsdXMgPC0gcGl2b3RfbG9uZ2VyKGlpc3ViX20xNXBsdXMsIGNvbHMgPSBjKCJiZXN0X20iLCAibG9fbSIsICJoaV9tIiksIG5hbWVzX3RvID0gImVzdF9tMTVwbHVzIikKaWlzdWJwaXZfbTE1cGx1cyA8LSBpaXN1YnBpdl9tMTVwbHVzWywgYygxLDMpXQppaXN1Ym5vdF9tMTVwbHVzIDwtIHZpb2xpbjE5XzE1cGx1c1ssIGMoMSw5KV0KaWlzdWJub3RfbTE1cGx1cyAlPD4lIGZpbHRlcihjb3VudHJ5ICE9IGMoIkluZGlhIiwgIkluZG9uZXNpYSIpKQoKYm94X20xNXBsdXMgPC0gYm94cGxvdCh2YWx1ZSB+IGNvdW50cnksIGlpc3VicGl2X20xNXBsdXMsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gaWlzdWJub3RfbTE1cGx1cyRub3RpZl9tMTVwbHVzLAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKaWlzdWJfZjE1cGx1cyA8LSB2aW9saW4xOV8xNXBsdXNbLCBjKDEsIDY6OCldCmlpc3ViX2YxNXBsdXMgJTw+JSBmaWx0ZXIoY291bnRyeSAhPSBjKCJJbmRpYSIsICJJbmRvbmVzaWEiKSkKaWlzdWJwaXZfZjE1cGx1cyA8LSBwaXZvdF9sb25nZXIoaWlzdWJfZjE1cGx1cywgY29scyA9IGMoImJlc3RfZiIsICJsb19mIiwgImhpX2YiKSwgbmFtZXNfdG8gPSAiZXN0X2YwNCIpCmlpc3VicGl2X2YxNXBsdXMgPC0gaWlzdWJwaXZfZjE1cGx1c1ssIGMoMSwzKV0KaWlzdWJub3RfZjE1cGx1cyA8LSB2aW9saW4xOV8xNXBsdXNbLCBjKDEsMTApXQppaXN1Ym5vdF9mMTVwbHVzICU8PiUgZmlsdGVyKGNvdW50cnkgIT0gYygiSW5kaWEiLCAiSW5kb25lc2lhIikpCgpib3hfZjE1cGx1cyA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgaWlzdWJwaXZfZjE1cGx1cywgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBpaXN1Ym5vdF9mMTVwbHVzJG5vdGlmX2YxNXBsdXMsCiAgICAgICB5ID0gMToyOCwKICAgICAgIGNvbCA9ICJyZWQiLAogICAgICAgcGNoID0gMTYpCgpgYGAKCgpSZXBlYXRpbmcgc2FtZSBkYXRhIGFuYWx5c2lzIGZvciAyMDIwCgpgYGB7cn0Kc2V0d2QoIn4vRGVza3RvcC9BRlAvbW9kVjMvZGF0YSIpCmJ1cmRlbl8yMDIwIDwtIHJlYWRfY3N2KCJUQl9idXJkZW5fMjAyMC5jc3YiKQpub3RpZl8yMDIwIDwtIHJlYWRfY3N2KCJUQl9ub3RpZmljYXRpb25zLmNzdiIpCgpidXJkZW5fY2xlYW4gPC0gZmlsdGVyKGJ1cmRlbl8yMDIwLCByaXNrX2ZhY3RvciA9PSAiYWxsIikKYnVyZGVuX2NsZWFuICU8PiUgZmlsdGVyKHNleCAhPSAiYSIpCmJ1cmRlbjIwXzA0IDwtIGZpbHRlcihidXJkZW5fY2xlYW4sIGFnZV9ncm91cCA9PSAiMC00IikKYnVyZGVuMjBfNTE0IDwtIGZpbHRlcihidXJkZW5fY2xlYW4sIGFnZV9ncm91cCA9PSAiNS0xNCIpCmJ1cmRlbjIwXzAxNCA8LSBmaWx0ZXIoYnVyZGVuX2NsZWFuLCBhZ2VfZ3JvdXAgPT0gIjAtMTQiKQpidXJkZW4yMF8xNXBsdXMgPC0gZmlsdGVyKGJ1cmRlbl9jbGVhbiwgYWdlX2dyb3VwID09ICIxNXBsdXMiKQoKYnVyZGVuMjBfMDQgPC0gYnVyZGVuMjBfMDRbLCBjKDEsMyw5LDExLDEyLDEzKV0KYnVyZGVuMjBfNTE0IDwtIGJ1cmRlbjIwXzUxNFssIGMoMSwzLDksMTEsMTIsMTMpXQpidXJkZW4yMF8wMTQgPC0gYnVyZGVuMjBfMDE0WywgYygxLDMsOSwxMSwxMiwxMyldCmJ1cmRlbjIwXzE1cGx1cyA8LSBidXJkZW4yMF8xNXBsdXNbLCBjKDEsMyw5LDExLDEyLDEzKV0KCm1hbGUyMF8wNCA8LSBmaWx0ZXIoYnVyZGVuMjBfMDQsIHNleCA9PSAibSIpCmZlbWFsZTIwXzA0IDwtIGZpbHRlcihidXJkZW4yMF8wNCwgc2V4ID09ICJmIikKbWFsZTIwXzUxNCA8LSBmaWx0ZXIoYnVyZGVuMjBfNTE0LCBzZXggPT0gIm0iKQpmZW1hbGUyMF81MTQgPC0gZmlsdGVyKGJ1cmRlbjIwXzUxNCwgc2V4ID09ICJmIikKbWFsZTIwXzAxNCA8LSBmaWx0ZXIoYnVyZGVuMjBfMDE0LCBzZXggPT0gIm0iKQpmZW1hbGUyMF8wMTQgPC0gZmlsdGVyKGJ1cmRlbjIwXzAxNCwgc2V4ID09ICJmIikKbWFsZTIwXzE1cGx1cyA8LSBmaWx0ZXIoYnVyZGVuMjBfMTVwbHVzLCBzZXggPT0gIm0iKQpmZW1hbGUyMF8xNXBsdXMgPC0gZmlsdGVyKGJ1cmRlbjIwXzE1cGx1cywgc2V4ID09ICJmIikKCiNQaXZvdGVkIHRhYmxlcyBvZiBlc3RpbWF0ZXMgZm9yIGNyZWF0aW9uIG9mIGJhciBwbG90cyAKcGl2bWFsZV8wNCA8LSBwaXZvdF9sb25nZXIobWFsZTIwXzA0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZtYWxlXzA0IDwtIHBpdm1hbGVfMDRbLCBjKDEsNCldCnBpdmZlbWFsZV8wNCA8LSBwaXZvdF9sb25nZXIoZmVtYWxlMjBfMDQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCnBpdmZlbWFsZV8wNCA8LSBwaXZmZW1hbGVfMDRbLCBjKDEsNCldCnBpdm1hbGVfNTE0IDwtIHBpdm90X2xvbmdlcihtYWxlMjBfNTE0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZtYWxlXzUxNCA8LSBwaXZtYWxlXzUxNFssIGMoMSw0KV0KcGl2ZmVtYWxlXzUxNCA8LSBwaXZvdF9sb25nZXIoZmVtYWxlMjBfNTE0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZmZW1hbGVfNTE0IDwtIHBpdmZlbWFsZV81MTRbLCBjKDEsNCldCnBpdm1hbGVfMDE0IDwtIHBpdm90X2xvbmdlcihtYWxlMjBfMDE0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZtYWxlXzAxNCA8LSBwaXZtYWxlXzAxNFssIGMoMSw0KV0KcGl2ZmVtYWxlXzAxNCA8LSBwaXZvdF9sb25nZXIoZmVtYWxlMjBfMDE0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZmZW1hbGVfMDE0IDwtIHBpdmZlbWFsZV8wMTRbLCBjKDEsNCldCnBpdm1hbGVfMTVwbHVzIDwtIHBpdm90X2xvbmdlcihtYWxlMjBfMTVwbHVzLCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZtYWxlXzE1cGx1cyA8LSBwaXZtYWxlXzE1cGx1c1ssIGMoMSw0KV0KcGl2ZmVtYWxlXzE1cGx1cyA8LSBwaXZvdF9sb25nZXIoZmVtYWxlMjBfMTVwbHVzLCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZmZW1hbGVfMTVwbHVzIDwtIHBpdmZlbWFsZV8xNXBsdXNbLCBjKDEsNCldCgojRXh0cmFjdGluZyB0aGUgbm90aWZpY2F0aW9uIGRhdGEgZm9yIDIwMjAgdG8gYWRkIHRvIHRoZSBiYXIgcGxvdCAKbm90aWZfMjAyMCAlPD4lIGZpbHRlcih5ZWFyID09IDIwMjApCmNvbWJvTTIwXzA0IDwtIG1lcmdlKG1hbGUyMF8wNCwgbm90aWZfMjAyMFssIGMoMywgMTAwKV0sIGJ5ID0gImlzbzMiKQpjb21ib00yMF81MTQgPC0gbWVyZ2UobWFsZTIwXzUxNCwgbm90aWZfMjAyMFssIGMoMywgMTAzKV0sIGJ5ID0gImlzbzMiKQpjb21ib00yMF8wMTQgPC0gbWVyZ2UobWFsZTIwXzAxNCwgbm90aWZfMjAyMFssIGMoMywgMTA0KV0sIGJ5ID0gImlzbzMiKQpjb21ib00yMF8xNXBsdXMgPC0gbWVyZ2UobWFsZTIwXzE1cGx1cywgbm90aWZfMjAyMFssIGMoMywgMTEzKV0sIGJ5ID0gImlzbzMiKQoKY29tYm9GMjBfMDQgPC0gbWVyZ2UoZmVtYWxlMjBfMDQsIG5vdGlmXzIwMjBbLCBjKDMsIDExNSldLCBieSA9ICJpc28zIikKY29tYm9GMjBfNTE0IDwtIG1lcmdlKGZlbWFsZTIwXzUxNCwgbm90aWZfMjAyMFssIGMoMywgMTE4KV0sIGJ5ID0gImlzbzMiKQpjb21ib0YyMF8wMTQgPC0gbWVyZ2UoZmVtYWxlMjBfMDE0LCBub3RpZl8yMDIwWywgYygzLCAxMTkpXSwgYnkgPSAiaXNvMyIpCmNvbWJvRjIwXzE1cGx1cyA8LSBtZXJnZShmZW1hbGUyMF8xNXBsdXMsIG5vdGlmXzIwMjBbLCBjKDMsIDEyOCldLCBieSA9ICJpc28zIikKCmBgYApJc29sYXRpbmcgdGhlIGRhdGEgZm9yIGhpZ2ggYnVyZGVuIGNvdW50cmllcyBleGNsdWRpbmcgSW5kaWEgYW5kIEluZG9uZXNpYQpgYGB7cn0KaWlfMjAyMF9tMDQgPC0gIGNvbWJvTTIwXzA0W2NvbWJvTTIwXzA0JGNvdW50cnkgJWluJSBjKCJBbmdvbGEiLCAiQmFuZ2xhZGVzaCIsICJCcmF6aWwiLCAiQ2hpbmEiLCAiRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiBLb3JlYSIsICJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nbyIsICJFdGhpb3BpYSIsICJLZW55YSIsICJNb3phbWJpcXVlIiwgIk15YW5tYXIiLCAiTmlnZXJpYSIsICJQYWtpc3RhbiIsICJQaGlsaXBwaW5lcyIsICJSdXNzaWFuIEZlZGVyYXRpb24iLCAiU291dGggQWZyaWNhIiwgIlRoYWlsYW5kIiwgIlVuaXRlZCBSZXB1YmxpYyBvZiBUYW56YW5pYSIsICJWaWV0IE5hbSIsICJDYW1ib2RpYSIsICJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMiLCAiQ29uZ28iLCAiTGVzb3RobyIsICJMaWJlcmlhIiwgIk5hbWliaWEiLCAiUGFwdWEgTmV3IEd1aW5lYSIsICJTaWVycmEgTGVvbmUiLCAiWmFtYmlhIiwgIlppbWJhYndlIiksIF0KCmlpXzIwMjBfZjA0IDwtICBjb21ib0YyMF8wNFtjb21ib0YyMF8wNCRjb3VudHJ5ICVpbiUgYygiQW5nb2xhIiwgIkJhbmdsYWRlc2giLCAiQnJhemlsIiwgIkNoaW5hIiwgIkRlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2YgS29yZWEiLCAiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ28iLCAiRXRoaW9waWEiLCAiS2VueWEiLCAiTW96YW1iaXF1ZSIsICJNeWFubWFyIiwgIk5pZ2VyaWEiLCAiUGFraXN0YW4iLCAiUGhpbGlwcGluZXMiLCAiUnVzc2lhbiBGZWRlcmF0aW9uIiwgIlNvdXRoIEFmcmljYSIsICJUaGFpbGFuZCIsICJVbml0ZWQgUmVwdWJsaWMgb2YgVGFuemFuaWEiLCAiVmlldCBOYW0iLCAiQ2FtYm9kaWEiLCAiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIiwgIkNvbmdvIiwgIkxlc290aG8iLCAiTGliZXJpYSIsICJOYW1pYmlhIiwgIlBhcHVhIE5ldyBHdWluZWEiLCAiU2llcnJhIExlb25lIiwgIlphbWJpYSIsICJaaW1iYWJ3ZSIpLCBdCgppaV8yMDIwX201MTQgPC0gIGNvbWJvTTIwXzUxNFtjb21ib00yMF81MTQkY291bnRyeSAlaW4lIGMoIkFuZ29sYSIsICJCYW5nbGFkZXNoIiwgIkJyYXppbCIsICJDaGluYSIsICJEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mIEtvcmVhIiwgIkRlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIENvbmdvIiwgIkV0aGlvcGlhIiwgIktlbnlhIiwgIk1vemFtYmlxdWUiLCAiTXlhbm1hciIsICJOaWdlcmlhIiwgIlBha2lzdGFuIiwgIlBoaWxpcHBpbmVzIiwgIlJ1c3NpYW4gRmVkZXJhdGlvbiIsICJTb3V0aCBBZnJpY2EiLCAiVGhhaWxhbmQiLCAiVW5pdGVkIFJlcHVibGljIG9mIFRhbnphbmlhIiwgIlZpZXQgTmFtIiwgIkNhbWJvZGlhIiwgIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIsICJDb25nbyIsICJMZXNvdGhvIiwgIkxpYmVyaWEiLCAiTmFtaWJpYSIsICJQYXB1YSBOZXcgR3VpbmVhIiwgIlNpZXJyYSBMZW9uZSIsICJaYW1iaWEiLCAiWmltYmFid2UiKSwgXQoKaWlfMjAyMF9mNTE0IDwtICBjb21ib0YyMF81MTRbY29tYm9GMjBfNTE0JGNvdW50cnkgJWluJSBjKCJBbmdvbGEiLCAiQmFuZ2xhZGVzaCIsICJCcmF6aWwiLCAiQ2hpbmEiLCAiRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiBLb3JlYSIsICJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nbyIsICJFdGhpb3BpYSIsICJLZW55YSIsICJNb3phbWJpcXVlIiwgIk15YW5tYXIiLCAiTmlnZXJpYSIsICJQYWtpc3RhbiIsICJQaGlsaXBwaW5lcyIsICJSdXNzaWFuIEZlZGVyYXRpb24iLCAiU291dGggQWZyaWNhIiwgIlRoYWlsYW5kIiwgIlVuaXRlZCBSZXB1YmxpYyBvZiBUYW56YW5pYSIsICJWaWV0IE5hbSIsICJDYW1ib2RpYSIsICJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMiLCAiQ29uZ28iLCAiTGVzb3RobyIsICJMaWJlcmlhIiwgIk5hbWliaWEiLCAiUGFwdWEgTmV3IEd1aW5lYSIsICJTaWVycmEgTGVvbmUiLCAiWmFtYmlhIiwgIlppbWJhYndlIiksIF0KCmlpXzIwMjBfbTAxNCA8LSAgY29tYm9NMjBfMDE0W2NvbWJvTTIwXzAxNCRjb3VudHJ5ICVpbiUgYygiQW5nb2xhIiwgIkJhbmdsYWRlc2giLCAiQnJhemlsIiwgIkNoaW5hIiwgIkRlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2YgS29yZWEiLCAiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ28iLCAiRXRoaW9waWEiLCAiS2VueWEiLCAiTW96YW1iaXF1ZSIsICJNeWFubWFyIiwgIk5pZ2VyaWEiLCAiUGFraXN0YW4iLCAiUGhpbGlwcGluZXMiLCAiUnVzc2lhbiBGZWRlcmF0aW9uIiwgIlNvdXRoIEFmcmljYSIsICJUaGFpbGFuZCIsICJVbml0ZWQgUmVwdWJsaWMgb2YgVGFuemFuaWEiLCAiVmlldCBOYW0iLCAiQ2FtYm9kaWEiLCAiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIiwgIkNvbmdvIiwgIkxlc290aG8iLCAiTGliZXJpYSIsICJOYW1pYmlhIiwgIlBhcHVhIE5ldyBHdWluZWEiLCAiU2llcnJhIExlb25lIiwgIlphbWJpYSIsICJaaW1iYWJ3ZSIpLCBdCgppaV8yMDIwX2YwMTQgPC0gIGNvbWJvRjIwXzAxNFtjb21ib0YyMF8wMTQkY291bnRyeSAlaW4lIGMoIkFuZ29sYSIsICJCYW5nbGFkZXNoIiwgIkJyYXppbCIsICJDaGluYSIsICJEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mIEtvcmVhIiwgIkRlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIENvbmdvIiwgIkV0aGlvcGlhIiwgIktlbnlhIiwgIk1vemFtYmlxdWUiLCAiTXlhbm1hciIsICJOaWdlcmlhIiwgIlBha2lzdGFuIiwgIlBoaWxpcHBpbmVzIiwgIlJ1c3NpYW4gRmVkZXJhdGlvbiIsICJTb3V0aCBBZnJpY2EiLCAiVGhhaWxhbmQiLCAiVW5pdGVkIFJlcHVibGljIG9mIFRhbnphbmlhIiwgIlZpZXQgTmFtIiwgIkNhbWJvZGlhIiwgIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIsICJDb25nbyIsICJMZXNvdGhvIiwgIkxpYmVyaWEiLCAiTmFtaWJpYSIsICJQYXB1YSBOZXcgR3VpbmVhIiwgIlNpZXJyYSBMZW9uZSIsICJaYW1iaWEiLCAiWmltYmFid2UiKSwgXQoKaWlfMjAyMF9tMTVwbHVzIDwtICBjb21ib00yMF8xNXBsdXNbY29tYm9NMjBfMTVwbHVzJGNvdW50cnkgJWluJSBjKCJBbmdvbGEiLCAiQmFuZ2xhZGVzaCIsICJCcmF6aWwiLCAiQ2hpbmEiLCAiRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiBLb3JlYSIsICJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nbyIsICJFdGhpb3BpYSIsICJLZW55YSIsICJNb3phbWJpcXVlIiwgIk15YW5tYXIiLCAiTmlnZXJpYSIsICJQYWtpc3RhbiIsICJQaGlsaXBwaW5lcyIsICJSdXNzaWFuIEZlZGVyYXRpb24iLCAiU291dGggQWZyaWNhIiwgIlRoYWlsYW5kIiwgIlVuaXRlZCBSZXB1YmxpYyBvZiBUYW56YW5pYSIsICJWaWV0IE5hbSIsICJDYW1ib2RpYSIsICJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMiLCAiQ29uZ28iLCAiTGVzb3RobyIsICJMaWJlcmlhIiwgIk5hbWliaWEiLCAiUGFwdWEgTmV3IEd1aW5lYSIsICJTaWVycmEgTGVvbmUiLCAiWmFtYmlhIiwgIlppbWJhYndlIiksIF0KCmlpXzIwMjBfZjE1cGx1cyA8LSAgY29tYm9GMjBfMTVwbHVzW2NvbWJvRjIwXzE1cGx1cyRjb3VudHJ5ICVpbiUgYygiQW5nb2xhIiwgIkJhbmdsYWRlc2giLCAiQnJhemlsIiwgIkNoaW5hIiwgIkRlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2YgS29yZWEiLCAiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ28iLCAiRXRoaW9waWEiLCAiS2VueWEiLCAiTW96YW1iaXF1ZSIsICJNeWFubWFyIiwgIk5pZ2VyaWEiLCAiUGFraXN0YW4iLCAiUGhpbGlwcGluZXMiLCAiUnVzc2lhbiBGZWRlcmF0aW9uIiwgIlNvdXRoIEFmcmljYSIsICJUaGFpbGFuZCIsICJVbml0ZWQgUmVwdWJsaWMgb2YgVGFuemFuaWEiLCAiVmlldCBOYW0iLCAiQ2FtYm9kaWEiLCAiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIiwgIkNvbmdvIiwgIkxlc290aG8iLCAiTGliZXJpYSIsICJOYW1pYmlhIiwgIlBhcHVhIE5ldyBHdWluZWEiLCAiU2llcnJhIExlb25lIiwgIlphbWJpYSIsICJaaW1iYWJ3ZSIpLCBdCgoKYGBgCgpQcmVwcGluZyBkYXRhIGZvciBib3ggcGxvdHMgCgpgYGB7cn0KdG9waXZfbTA0IDwtIGlpXzIwMjBfbTA0WywgYygyLDQ6NildCnBpdnZlZF9tMDQgPC0gcGl2b3RfbG9uZ2VyKHRvcGl2X20wNCwgY29scyA9IGMoImJlc3QiLCAibG8iLCAiaGkiKSwgbmFtZXNfdG8gPSAiZXN0IikKcGl2dmVkX20wNCA8LSBwaXZ2ZWRfbTA0WywgYygxLDMpXQoKdG9waXZfZjA0IDwtIGlpXzIwMjBfZjA0WywgYygyLDQ6NildCnBpdnZlZF9mMDQgPC0gcGl2b3RfbG9uZ2VyKHRvcGl2X2YwNCwgY29scyA9IGMoImJlc3QiLCAibG8iLCAiaGkiKSwgbmFtZXNfdG8gPSAiZXN0IikKcGl2dmVkX2YwNCA8LSBwaXZ2ZWRfZjA0WywgYygxLDMpXQoKdG9waXZfbTUxNCA8LSBpaV8yMDIwX201MTRbLCBjKDIsNDo2KV0KcGl2dmVkX201MTQgPC0gcGl2b3RfbG9uZ2VyKHRvcGl2X201MTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCnBpdnZlZF9tNTE0IDwtIHBpdnZlZF9tNTE0WywgYygxLDMpXQoKdG9waXZfZjUxNCA8LSBpaV8yMDIwX2Y1MTRbLCBjKDIsNDo2KV0KcGl2dmVkX2Y1MTQgPC0gcGl2b3RfbG9uZ2VyKHRvcGl2X2Y1MTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCnBpdnZlZF9mNTE0IDwtIHBpdnZlZF9mNTE0WywgYygxLDMpXQoKdG9waXZfbTAxNCA8LSBpaV8yMDIwX20wMTRbLCBjKDIsNDo2KV0KcGl2dmVkX20wMTQgPC0gcGl2b3RfbG9uZ2VyKHRvcGl2X20wMTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCnBpdnZlZF9tMDE0IDwtIHBpdnZlZF9tMDE0WywgYygxLDMpXQoKdG9waXZfZjAxNCA8LSBpaV8yMDIwX2YwMTRbLCBjKDIsNDo2KV0KcGl2dmVkX2YwMTQgPC0gcGl2b3RfbG9uZ2VyKHRvcGl2X2YwMTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCnBpdnZlZF9mMDE0IDwtIHBpdnZlZF9mMDE0WywgYygxLDMpXQoKCnRvcGl2X20xNXBsdXMgPC0gaWlfMjAyMF9tMTVwbHVzWywgYygyLDQ6NildCnBpdnZlZF9tMTVwbHVzIDwtIHBpdm90X2xvbmdlcih0b3Bpdl9tMTVwbHVzLCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpwaXZ2ZWRfbTE1cGx1cyA8LSBwaXZ2ZWRfbTE1cGx1c1ssIGMoMSwzKV0KCgp0b3Bpdl9mMTVwbHVzIDwtIGlpXzIwMjBfZjE1cGx1c1ssIGMoMiw0OjYpXQpwaXZ2ZWRfZjE1cGx1cyA8LSBwaXZvdF9sb25nZXIodG9waXZfZjE1cGx1cywgY29scyA9IGMoImJlc3QiLCAibG8iLCAiaGkiKSwgbmFtZXNfdG8gPSAiZXN0IikKcGl2dmVkX2YxNXBsdXMgPC0gcGl2dmVkX2YxNXBsdXNbLCBjKDEsMyldCgoKYGBgCgpDcmVhdGluZyBib3ggcGxvdHMgZm9yIGhpZ2ggYnVyZGVuIGNvdW50cmllcyBleGNsdWRpbmcgCmBgYHtyfQpib3gyMF9tMDQgPC0gYm94cGxvdCh2YWx1ZSB+IGNvdW50cnksIHBpdnZlZF9tMDQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCmlpXzIwMjBfbTA0IDwtIGlpXzIwMjBfbTA0W29yZGVyKGlpXzIwMjBfbTA0JGNvdW50cnkpLCBdCnBvaW50cyh4ID0gaWlfMjAyMF9tMDQkbmV3cmVsX20wNCwKICAgICAgIHkgPSAxOjI4LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCmJveDIwX2YwNCA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgcGl2dmVkX2YwNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKaWlfMjAyMF9mMDQgPC0gaWlfMjAyMF9mMDRbb3JkZXIoaWlfMjAyMF9mMDQkY291bnRyeSksIF0KcG9pbnRzKHggPSBpaV8yMDIwX2YwNCRuZXdyZWxfZjA0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYm94MjBfbTUxNCA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgcGl2dmVkX201MTQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCmlpXzIwMjBfbTUxNCA8LSBpaV8yMDIwX201MTRbb3JkZXIoaWlfMjAyMF9tNTE0JGNvdW50cnkpLCBdCnBvaW50cyh4ID0gaWlfMjAyMF9tNTE0JG5ld3JlbF9tNTE0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYm94MjBfZjUxNCA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgcGl2dmVkX2Y1MTQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCmlpXzIwMjBfZjUxNCA8LSBpaV8yMDIwX2Y1MTRbb3JkZXIoaWlfMjAyMF9mNTE0JGNvdW50cnkpLCBdCnBvaW50cyh4ID0gaWlfMjAyMF9mNTE0JG5ld3JlbF9mNTE0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYm94MjBfbTAxNCA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgcGl2dmVkX20wMTQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCmlpXzIwMjBfbTAxNCA8LSBpaV8yMDIwX20wMTRbb3JkZXIoaWlfMjAyMF9tMDE0JGNvdW50cnkpLCBdCnBvaW50cyh4ID0gaWlfMjAyMF9tMDE0JG5ld3JlbF9tMDE0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYm94MjBfZjAxNCA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgcGl2dmVkX2YwMTQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCmlpXzIwMjBfZjAxNCA8LSBpaV8yMDIwX2YwMTRbb3JkZXIoaWlfMjAyMF9mMDE0JGNvdW50cnkpLCBdCnBvaW50cyh4ID0gaWlfMjAyMF9mMDE0JG5ld3JlbF9mMDE0LAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYm94MjBfbTE1cGx1cyA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgcGl2dmVkX20xNXBsdXMsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCmlpXzIwMjBfbTE1cGx1cyA8LSBpaV8yMDIwX20xNXBsdXNbb3JkZXIoaWlfMjAyMF9tMTVwbHVzJGNvdW50cnkpLCBdCnBvaW50cyh4ID0gaWlfMjAyMF9tMTVwbHVzJG5ld3JlbF9tMTVwbHVzLAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYm94MjBfZjE1cGx1cyA8LSBib3hwbG90KHZhbHVlIH4gY291bnRyeSwgcGl2dmVkX2YxNXBsdXMsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCmlpXzIwMjBfZjE1cGx1cyA8LSBpaV8yMDIwX2YxNXBsdXNbb3JkZXIoaWlfMjAyMF9mMTVwbHVzJGNvdW50cnkpLCBdCnBvaW50cyh4ID0gaWlfMjAyMF9mMTVwbHVzJG5ld3JlbF9mMTVwbHVzLAogICAgICAgeSA9IDE6MjgsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYGBgCgpQZXJmb3JtaW5nIHNhbWUgYW5hbHlzaXMgYnkgY29udGluZW50IHN0YXJ0aW5nIHdpdGggMjAxOSBkYXRhIAoKYGBge3J9CmVzdDE5XzA0IDwtIGZpbHRlcihlc3RpbWF0ZV8yMDE5LCBhZ2VfZ3JvdXAgPT0gIjAtNCIpCmVzdDE5XzUxNCA8LSBmaWx0ZXIoZXN0aW1hdGVfMjAxOSwgYWdlX2dyb3VwID09ICI1LTE0IikKZXN0MTlfMDE0IDwtIGZpbHRlcihlc3RpbWF0ZV8yMDE5LCBhZ2VfZ3JvdXAgPT0gIjAtMTQiKQplc3QxOV8xNXBsdXMgPC0gZmlsdGVyKGVzdGltYXRlXzIwMTksIGFnZV9ncm91cCA9PSAiMTVwbHVzIikKCmVzdE0xOV8wNCA8LSBmaWx0ZXIoZXN0MTlfMDQsIHNleCA9PSAibSIpCmVzdEYxOV8wNCA8LSBmaWx0ZXIoZXN0MTlfMDQsIHNleCA9PSAiZiIpCmVzdE0xOV81MTQgPC0gZmlsdGVyKGVzdDE5XzUxNCwgc2V4ID09ICJtIikKZXN0RjE5XzUxNCA8LSBmaWx0ZXIoZXN0MTlfNTE0LCBzZXggPT0gImYiKQplc3RNMTlfMDE0IDwtIGZpbHRlcihlc3QxOV8wMTQsIHNleCA9PSAibSIpCmVzdEYxOV8wMTQgPC0gZmlsdGVyKGVzdDE5XzAxNCwgc2V4ID09ICJmIikKZXN0TTE5XzE1cGx1cyA8LSBmaWx0ZXIoZXN0MTlfMTVwbHVzLCBzZXggPT0gIm0iKQplc3RGMTlfMTVwbHVzIDwtIGZpbHRlcihlc3QxOV8xNXBsdXMsIHNleCA9PSAiZiIpCgplc3RNMTlfMDQgPC0gZXN0TTE5XzA0WywgLWMoMyw0KV0KZXN0RjE5XzA0IDwtIGVzdEYxOV8wNFssIC1jKDMsNCldCmVzdE0xOV81MTQgPC0gZXN0TTE5XzUxNFssIC1jKDMsNCldCmVzdEYxOV81MTQgPC0gZXN0RjE5XzUxNFssIC1jKDMsNCldCmVzdE0xOV8wMTQgPC0gZXN0TTE5XzAxNFssIC1jKDMsNCldCmVzdEYxOV8wMTQgPC0gZXN0RjE5XzAxNFssIC1jKDMsNCldCmVzdE0xOV8xNXBsdXMgPC0gZXN0TTE5XzE1cGx1c1ssIC1jKDMsNCldCmVzdEYxOV8xNXBsdXMgPC0gZXN0RjE5XzE1cGx1c1ssIC1jKDMsNCldCgojIyNBZGRpbmcgaW4gdGhlIGNhc2Ugbm90aWZpY2F0aW9uIGRhdGEgZm9yIDIwMTkKdG90XzE5X20wNCA8LSBtZXJnZShlc3RNMTlfMDQsIGNhc2VmaWx0ZXJfMjAxOVssYygxOjQpXSwgYnkgPSBjKCJjb3VudHJ5IiwgImlzbzMiKSkKdG90XzE5X20wNCA8LSB0b3RfMTlfbTA0WyxjKDEsMiw2LDM6NSwgNyldCmNvbG5hbWVzKHRvdF8xOV9tMDQpW2NvbG5hbWVzKHRvdF8xOV9tMDQpID09ICJuZXdyZWxfbTA0Il0gPC0gImNhc2VzIgoKdG90XzE5X2YwNCA8LSBtZXJnZShlc3RGMTlfMDQsIGNhc2VmaWx0ZXJfMjAxOVssYygxOjMsIDgpXSwgYnkgPSBjKCJjb3VudHJ5IiwgImlzbzMiKSkKdG90XzE5X2YwNCA8LSB0b3RfMTlfZjA0WyxjKDEsMiw2LDM6NSwgNyldCmNvbG5hbWVzKHRvdF8xOV9mMDQpW2NvbG5hbWVzKHRvdF8xOV9mMDQpID09ICJuZXdyZWxfZjA0Il0gPC0gImNhc2VzIgoKdG90XzE5X201MTQgPC0gbWVyZ2UoZXN0TTE5XzUxNCwgY2FzZWZpbHRlcl8yMDE5WyxjKDE6MywgNSldLCBieSA9IGMoImNvdW50cnkiLCAiaXNvMyIpKQp0b3RfMTlfbTUxNCA8LSB0b3RfMTlfbTUxNFssYygxLDIsNiwzOjUsIDcpXQpjb2xuYW1lcyh0b3RfMTlfbTUxNClbY29sbmFtZXModG90XzE5X201MTQpID09ICJuZXdyZWxfbTUxNCJdIDwtICJjYXNlcyIKCnRvdF8xOV9mNTE0IDwtIG1lcmdlKGVzdEYxOV81MTQsIGNhc2VmaWx0ZXJfMjAxOVssYygxOjMsIDkpXSwgYnkgPSBjKCJjb3VudHJ5IiwgImlzbzMiKSkKdG90XzE5X2Y1MTQgPC0gdG90XzE5X2Y1MTRbLGMoMSwyLDYsMzo1LCA3KV0KY29sbmFtZXModG90XzE5X2Y1MTQpW2NvbG5hbWVzKHRvdF8xOV9mNTE0KSA9PSAibmV3cmVsX2Y1MTQiXSA8LSAiY2FzZXMiCgp0b3RfMTlfbTAxNCA8LSBtZXJnZShlc3RNMTlfMDE0LCBjYXNlZmlsdGVyXzIwMTlbLGMoMTozLCA2KV0sIGJ5ID0gYygiY291bnRyeSIsICJpc28zIikpCnRvdF8xOV9tMDE0IDwtIHRvdF8xOV9tMDE0WyxjKDEsMiw2LDM6NSwgNyldCmNvbG5hbWVzKHRvdF8xOV9tMDE0KVtjb2xuYW1lcyh0b3RfMTlfbTAxNCkgPT0gIm5ld3JlbF9tMDE0Il0gPC0gImNhc2VzIgoKdG90XzE5X2YwMTQgPC0gbWVyZ2UoZXN0RjE5XzAxNCwgY2FzZWZpbHRlcl8yMDE5WyxjKDE6MywgMTApXSwgYnkgPSBjKCJjb3VudHJ5IiwgImlzbzMiKSkKdG90XzE5X2YwMTQgPC0gdG90XzE5X2YwMTRbLGMoMSwyLDYsMzo1LCA3KV0KY29sbmFtZXModG90XzE5X2YwMTQpW2NvbG5hbWVzKHRvdF8xOV9mMDE0KSA9PSAibmV3cmVsX2YwMTQiXSA8LSAiY2FzZXMiCgp0b3RfMTlfbTE1cGx1cyA8LSBtZXJnZShlc3RNMTlfMTVwbHVzLCBjYXNlZmlsdGVyXzIwMTlbLGMoMTozLCA3KV0sIGJ5ID0gYygiY291bnRyeSIsICJpc28zIikpCnRvdF8xOV9tMTVwbHVzIDwtIHRvdF8xOV9tMTVwbHVzWyxjKDEsMiw2LDM6NSwgNyldCmNvbG5hbWVzKHRvdF8xOV9tMTVwbHVzKVtjb2xuYW1lcyh0b3RfMTlfbTE1cGx1cykgPT0gIm5ld3JlbF9tMTVwbHVzIl0gPC0gImNhc2VzIgoKdG90XzE5X2YxNXBsdXMgPC0gbWVyZ2UoZXN0RjE5XzE1cGx1cywgY2FzZWZpbHRlcl8yMDE5WyxjKDE6MywgMTEpXSwgYnkgPSBjKCJjb3VudHJ5IiwgImlzbzMiKSkKdG90XzE5X2YxNXBsdXMgPC0gdG90XzE5X2YxNXBsdXNbLGMoMSwyLDYsMzo1LCA3KV0KY29sbmFtZXModG90XzE5X2YxNXBsdXMpW2NvbG5hbWVzKHRvdF8xOV9mMTVwbHVzKSA9PSAibmV3cmVsX2YxNXBsdXMiXSA8LSAiY2FzZXMiCgoKIyNFeHRyYWN0aW5nIGluZm9ybWF0aW9uIHBlcmNvbnRpbmVudCAKc3VtX2Jlc3RfbTA0IDwtIHRvdF8xOV9tMDQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGJlc3QpKQpzdW1fbG9fbTA0IDwtIHRvdF8xOV9tMDQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtX2hpX20wNCA8LSB0b3RfMTlfbTA0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShoaSkpCnN1bV9jYXNlc19tMDQgPC0gdG90XzE5X20wNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obmEub21pdChjYXNlcykpKQptZXJnZTE5X20wNCA8LSBjYmluZChzdW1fYmVzdF9tMDQsIHN1bV9sb19tMDQkdG90YWwsIHN1bV9oaV9tMDQkdG90YWwsIHN1bV9jYXNlc19tMDQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMTlfbTA0KSA8LSBjKCJnX3dob3JlZ2lvbiIsICJiZXN0IiwgImxvIiwgImhpIiwgImNhc2VzIikKCnN1bV9iZXN0X2YwNCA8LSB0b3RfMTlfZjA0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtX2xvX2YwNCA8LSB0b3RfMTlfZjA0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShsbykpCnN1bV9oaV9mMDQgPC0gdG90XzE5X2YwNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oaGkpKQpzdW1fY2FzZXNfZjA0IDwtIHRvdF8xOV9mMDQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UxOV9mMDQgPC0gY2JpbmQoc3VtX2Jlc3RfZjA0LCBzdW1fbG9fZjA0JHRvdGFsLCBzdW1faGlfZjA0JHRvdGFsLCBzdW1fY2FzZXNfZjA0JHRvdGFsKQpjb2xuYW1lcyhtZXJnZTE5X2YwNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW1fYmVzdF9tMDE0IDwtIHRvdF8xOV9tMDE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtX2xvX20wMTQgPC0gdG90XzE5X20wMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtX2hpX20wMTQgPC0gdG90XzE5X20wMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtX2Nhc2VzX20wMTQgPC0gdG90XzE5X20wMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UxOV9tMDE0IDwtIGNiaW5kKHN1bV9iZXN0X20wMTQsIHN1bV9sb19tMDE0JHRvdGFsLCBzdW1faGlfbTAxNCR0b3RhbCwgc3VtX2Nhc2VzX20wMTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMTlfbTAxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW1fYmVzdF9mMDE0IDwtIHRvdF8xOV9mMDE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtX2xvX2YwMTQgPC0gdG90XzE5X2YwMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtX2hpX2YwMTQgPC0gdG90XzE5X2YwMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtX2Nhc2VzX2YwMTQgPC0gdG90XzE5X2YwMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UxOV9mMDE0IDwtIGNiaW5kKHN1bV9iZXN0X2YwMTQsIHN1bV9sb19mMDE0JHRvdGFsLCBzdW1faGlfZjAxNCR0b3RhbCwgc3VtX2Nhc2VzX2YwMTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMTlfZjAxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW1fYmVzdF9tNTE0IDwtIHRvdF8xOV9tNTE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtX2xvX201MTQgPC0gdG90XzE5X201MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtX2hpX201MTQgPC0gdG90XzE5X201MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtX2Nhc2VzX201MTQgPC0gdG90XzE5X201MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UxOV9tNTE0IDwtIGNiaW5kKHN1bV9iZXN0X201MTQsIHN1bV9sb19tNTE0JHRvdGFsLCBzdW1faGlfbTUxNCR0b3RhbCwgc3VtX2Nhc2VzX201MTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMTlfbTUxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW1fYmVzdF9mNTE0IDwtIHRvdF8xOV9mNTE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtX2xvX2Y1MTQgPC0gdG90XzE5X2Y1MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtX2hpX2Y1MTQgPC0gdG90XzE5X2Y1MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtX2Nhc2VzX2Y1MTQgPC0gdG90XzE5X2Y1MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UxOV9mNTE0IDwtIGNiaW5kKHN1bV9iZXN0X2Y1MTQsIHN1bV9sb19mNTE0JHRvdGFsLCBzdW1faGlfZjUxNCR0b3RhbCwgc3VtX2Nhc2VzX2Y1MTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMTlfZjUxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW1fYmVzdF9tMTVwbHVzIDwtIHRvdF8xOV9tMTVwbHVzICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtX2xvX20xNXBsdXMgPC0gdG90XzE5X20xNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtX2hpX20xNXBsdXMgPC0gdG90XzE5X20xNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtX2Nhc2VzX20xNXBsdXMgPC0gdG90XzE5X20xNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UxOV9tMTVwbHVzIDwtIGNiaW5kKHN1bV9iZXN0X20xNXBsdXMsIHN1bV9sb19tMTVwbHVzJHRvdGFsLCBzdW1faGlfbTE1cGx1cyR0b3RhbCwgc3VtX2Nhc2VzX20xNXBsdXMkdG90YWwpCmNvbG5hbWVzKG1lcmdlMTlfbTE1cGx1cykgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW1fYmVzdF9mMTVwbHVzIDwtIHRvdF8xOV9mMTVwbHVzICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtX2xvX2YxNXBsdXMgPC0gdG90XzE5X2YxNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtX2hpX2YxNXBsdXMgPC0gdG90XzE5X2YxNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtX2Nhc2VzX2YxNXBsdXMgPC0gdG90XzE5X2YxNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UxOV9mMTVwbHVzIDwtIGNiaW5kKHN1bV9iZXN0X2YxNXBsdXMsIHN1bV9sb19mMTVwbHVzJHRvdGFsLCBzdW1faGlfZjE1cGx1cyR0b3RhbCwgc3VtX2Nhc2VzX2YxNXBsdXMkdG90YWwpCmNvbG5hbWVzKG1lcmdlMTlfZjE1cGx1cykgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpgYGAKClBsb3R0aW5nIGJveHBsb3RzIGZvciBjb250aW5lbnQgZGF0YSBmb3IgMjAxOSAKCmBgYHtyfQpwaXZ0b3RfbTA0IDwtIHBpdm90X2xvbmdlcihtZXJnZTE5X20wNCwgY29scyA9IGMoImJlc3QiLCAibG8iLCAiaGkiKSwgbmFtZXNfdG8gPSAiZXN0IikKYm94MTlfbTA0IDwtIGJveHBsb3QodmFsdWUgfiBnX3dob3JlZ2lvbiwgcGl2dG90X20wNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTE5X20wNCRjYXNlcywKICAgICAgIHkgPSAxOjYsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKcGl2dG90X2YwNCA8LSBwaXZvdF9sb25nZXIobWVyZ2UxOV9mMDQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDE5X2YwNCA8LSBib3hwbG90KHZhbHVlIH4gZ193aG9yZWdpb24sIHBpdnRvdF9mMDQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gbWVyZ2UxOV9mMDQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCnBpdnRvdF9tNTE0IDwtIHBpdm90X2xvbmdlcihtZXJnZTE5X201MTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDE5X201MTQgPC0gYm94cGxvdCh2YWx1ZSB+IGdfd2hvcmVnaW9uLCBwaXZ0b3RfbTUxNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTE5X201MTQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCnBpdnRvdF9mNTE0IDwtIHBpdm90X2xvbmdlcihtZXJnZTE5X2Y1MTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDE5X2Y1MTQgPC0gYm94cGxvdCh2YWx1ZSB+IGdfd2hvcmVnaW9uLCBwaXZ0b3RfZjUxNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTE5X2Y1MTQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCnBpdnRvdF9tMDE0IDwtIHBpdm90X2xvbmdlcihtZXJnZTE5X20wMTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDE5X20wMTQgPC0gYm94cGxvdCh2YWx1ZSB+IGdfd2hvcmVnaW9uLCBwaXZ0b3RfbTAxNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTE5X20wMTQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCnBpdnRvdF9mMDE0IDwtIHBpdm90X2xvbmdlcihtZXJnZTE5X2YwMTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDE5X2YwMTQgPC0gYm94cGxvdCh2YWx1ZSB+IGdfd2hvcmVnaW9uLCBwaXZ0b3RfZjAxNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTE5X2YwMTQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCgpwaXZ0b3RfbTE1cGx1cyA8LSBwaXZvdF9sb25nZXIobWVyZ2UxOV9tMTVwbHVzLCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpib3gxOV9tMTVwbHVzIDwtIGJveHBsb3QodmFsdWUgfiBnX3dob3JlZ2lvbiwgcGl2dG90X20xNXBsdXMsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gbWVyZ2UxOV9tMTVwbHVzJGNhc2VzLAogICAgICAgeSA9IDE6NiwKICAgICAgIGNvbCA9ICJyZWQiLAogICAgICAgcGNoID0gMTYpCgpwaXZ0b3RfZjE1cGx1cyA8LSBwaXZvdF9sb25nZXIobWVyZ2UxOV9mMTVwbHVzLCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpib3gxOV9mMTVwbHVzIDwtIGJveHBsb3QodmFsdWUgfiBnX3dob3JlZ2lvbiwgcGl2dG90X2YxNXBsdXMsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gbWVyZ2UxOV9mMTVwbHVzJGNhc2VzLAogICAgICAgeSA9IDE6NiwKICAgICAgIGNvbCA9ICJyZWQiLAogICAgICAgcGNoID0gMTYpCgpgYGAKUGVyZm9ybWluZyBjb250aW5lbnRhbCBhbmFseXNpcyB3aXRoIDIwMjAgZGF0YSAKCmBgYHtyfQojQWRkaW5nIGdfd2hvcmVnaW9uIHRvIHRoZSBjb21iaW5lZCBkYXRhIGZyYW1lcwpyZWdpb25NMjBfMDQgPC0gbWVyZ2UobWFsZTIwXzA0LCBub3RpZl8yMDIwWywgYygzLCA1LDEwMCldLCBieSA9ICJpc28zIikKcmVnaW9uTTIwXzUxNCA8LSBtZXJnZShtYWxlMjBfNTE0LCBub3RpZl8yMDIwWywgYygzLCA1LCAxMDMpXSwgYnkgPSAiaXNvMyIpCnJlZ2lvbk0yMF8wMTQgPC0gbWVyZ2UobWFsZTIwXzAxNCwgbm90aWZfMjAyMFssIGMoMywgNSwgMTA0KV0sIGJ5ID0gImlzbzMiKQpyZWdpb25NMjBfMTVwbHVzIDwtIG1lcmdlKG1hbGUyMF8xNXBsdXMsIG5vdGlmXzIwMjBbLCBjKDMsIDUsIDExMyldLCBieSA9ICJpc28zIikKCnJlZ2lvbkYyMF8wNCA8LSBtZXJnZShmZW1hbGUyMF8wNCwgbm90aWZfMjAyMFssIGMoMywgNSwgMTE1KV0sIGJ5ID0gImlzbzMiKQpyZWdpb25GMjBfNTE0IDwtIG1lcmdlKGZlbWFsZTIwXzUxNCwgbm90aWZfMjAyMFssIGMoMywgNSwgMTE4KV0sIGJ5ID0gImlzbzMiKQpyZWdpb25GMjBfMDE0IDwtIG1lcmdlKGZlbWFsZTIwXzAxNCwgbm90aWZfMjAyMFssIGMoMywgNSwgMTE5KV0sIGJ5ID0gImlzbzMiKQpyZWdpb25GMjBfMTVwbHVzIDwtIG1lcmdlKGZlbWFsZTIwXzE1cGx1cywgbm90aWZfMjAyMFssIGMoMywgNSwgMTI4KV0sIGJ5ID0gImlzbzMiKQoKY29sbmFtZXMocmVnaW9uTTIwXzA0KVtjb2xuYW1lcyhyZWdpb25NMjBfMDQpID09ICJuZXdyZWxfbTA0Il0gPC0gImNhc2VzIgpjb2xuYW1lcyhyZWdpb25NMjBfNTE0KVtjb2xuYW1lcyhyZWdpb25NMjBfNTE0KSA9PSAibmV3cmVsX201MTQiXSA8LSAiY2FzZXMiCmNvbG5hbWVzKHJlZ2lvbk0yMF8wMTQpW2NvbG5hbWVzKHJlZ2lvbk0yMF8wMTQpID09ICJuZXdyZWxfbTAxNCJdIDwtICJjYXNlcyIKY29sbmFtZXMocmVnaW9uTTIwXzE1cGx1cylbY29sbmFtZXMocmVnaW9uTTIwXzE1cGx1cykgPT0gIm5ld3JlbF9tMTVwbHVzIl0gPC0gImNhc2VzIgoKY29sbmFtZXMocmVnaW9uRjIwXzA0KVtjb2xuYW1lcyhyZWdpb25GMjBfMDQpID09ICJuZXdyZWxfZjA0Il0gPC0gImNhc2VzIgpjb2xuYW1lcyhyZWdpb25GMjBfNTE0KVtjb2xuYW1lcyhyZWdpb25GMjBfNTE0KSA9PSAibmV3cmVsX2Y1MTQiXSA8LSAiY2FzZXMiCmNvbG5hbWVzKHJlZ2lvbkYyMF8wMTQpW2NvbG5hbWVzKHJlZ2lvbkYyMF8wMTQpID09ICJuZXdyZWxfZjAxNCJdIDwtICJjYXNlcyIKY29sbmFtZXMocmVnaW9uRjIwXzE1cGx1cylbY29sbmFtZXMocmVnaW9uRjIwXzE1cGx1cykgPT0gIm5ld3JlbF9mMTVwbHVzIl0gPC0gImNhc2VzIgoKI0NyZWF0aW5nIGRhdGEgZm9yIHRoZSBib3hwbG90cyAKc3VtMjBfYmVzdF9tMDQgPC0gcmVnaW9uTTIwXzA0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZXN0KSkKc3VtMjBfbG9fbTA0IDwtIHJlZ2lvbk0yMF8wNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obG8pKQpzdW0yMF9oaV9tMDQgPC0gcmVnaW9uTTIwXzA0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShoaSkpCnN1bTIwX2Nhc2VzX20wNCA8LSByZWdpb25NMjBfMDQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKG5hLm9taXQoY2FzZXMpKSkKbWVyZ2UyMF9tMDQgPC0gY2JpbmQoc3VtMjBfYmVzdF9tMDQsIHN1bTIwX2xvX20wNCR0b3RhbCwgc3VtMjBfaGlfbTA0JHRvdGFsLCBzdW0yMF9jYXNlc19tMDQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMjBfbTA0KSA8LSBjKCJnX3dob3JlZ2lvbiIsICJiZXN0IiwgImxvIiwgImhpIiwgImNhc2VzIikKCnN1bTIwX2Jlc3RfZjA0IDwtIHJlZ2lvbkYyMF8wNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVzdCkpCnN1bTIwX2xvX2YwNCA8LSByZWdpb25GMjBfMDQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGxvKSkKc3VtMjBfaGlfZjA0IDwtIHJlZ2lvbkYyMF8wNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oaGkpKQpzdW0yMF9jYXNlc19mMDQgPC0gcmVnaW9uRjIwXzA0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShuYS5vbWl0KGNhc2VzKSkpCm1lcmdlMjBfZjA0IDwtIGNiaW5kKHN1bTIwX2Jlc3RfZjA0LCBzdW0yMF9sb19mMDQkdG90YWwsIHN1bTIwX2hpX2YwNCR0b3RhbCwgc3VtMjBfY2FzZXNfZjA0JHRvdGFsKQpjb2xuYW1lcyhtZXJnZTIwX2YwNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW0yMF9iZXN0X201MTQgPC0gcmVnaW9uTTIwXzUxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVzdCkpCnN1bTIwX2xvX201MTQgPC0gcmVnaW9uTTIwXzUxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obG8pKQpzdW0yMF9oaV9tNTE0IDwtIHJlZ2lvbk0yMF81MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtMjBfY2FzZXNfbTUxNCA8LSByZWdpb25NMjBfNTE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShuYS5vbWl0KGNhc2VzKSkpCm1lcmdlMjBfbTUxNCA8LSBjYmluZChzdW0yMF9iZXN0X201MTQsIHN1bTIwX2xvX201MTQkdG90YWwsIHN1bTIwX2hpX201MTQkdG90YWwsIHN1bTIwX2Nhc2VzX201MTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMjBfbTUxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW0yMF9iZXN0X2Y1MTQgPC0gcmVnaW9uRjIwXzUxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVzdCkpCnN1bTIwX2xvX2Y1MTQgPC0gcmVnaW9uRjIwXzUxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obG8pKQpzdW0yMF9oaV9mNTE0IDwtIHJlZ2lvbkYyMF81MTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtMjBfY2FzZXNfZjUxNCA8LSByZWdpb25GMjBfNTE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShuYS5vbWl0KGNhc2VzKSkpCm1lcmdlMjBfZjUxNCA8LSBjYmluZChzdW0yMF9iZXN0X2Y1MTQsIHN1bTIwX2xvX2Y1MTQkdG90YWwsIHN1bTIwX2hpX2Y1MTQkdG90YWwsIHN1bTIwX2Nhc2VzX2Y1MTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMjBfZjUxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW0yMF9iZXN0X20wMTQgPC0gcmVnaW9uTTIwXzAxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVzdCkpCnN1bTIwX2xvX20wMTQgPC0gcmVnaW9uTTIwXzAxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obG8pKQpzdW0yMF9oaV9tMDE0IDwtIHJlZ2lvbk0yMF8wMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtMjBfY2FzZXNfbTAxNCA8LSByZWdpb25NMjBfMDE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShuYS5vbWl0KGNhc2VzKSkpCm1lcmdlMjBfbTAxNCA8LSBjYmluZChzdW0yMF9iZXN0X20wMTQsIHN1bTIwX2xvX20wMTQkdG90YWwsIHN1bTIwX2hpX20wMTQkdG90YWwsIHN1bTIwX2Nhc2VzX20wMTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMjBfbTAxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW0yMF9iZXN0X2YwMTQgPC0gcmVnaW9uRjIwXzAxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVzdCkpCnN1bTIwX2xvX2YwMTQgPC0gcmVnaW9uRjIwXzAxNCAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obG8pKQpzdW0yMF9oaV9mMDE0IDwtIHJlZ2lvbkYyMF8wMTQgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtMjBfY2FzZXNfZjAxNCA8LSByZWdpb25GMjBfMDE0ICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShuYS5vbWl0KGNhc2VzKSkpCm1lcmdlMjBfZjAxNCA8LSBjYmluZChzdW0yMF9iZXN0X2YwMTQsIHN1bTIwX2xvX2YwMTQkdG90YWwsIHN1bTIwX2hpX2YwMTQkdG90YWwsIHN1bTIwX2Nhc2VzX2YwMTQkdG90YWwpCmNvbG5hbWVzKG1lcmdlMjBfZjAxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW0yMF9iZXN0X20xNXBsdXMgPC0gcmVnaW9uTTIwXzE1cGx1cyAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVzdCkpCnN1bTIwX2xvX20xNXBsdXMgPC0gcmVnaW9uTTIwXzE1cGx1cyAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obG8pKQpzdW0yMF9oaV9tMTVwbHVzIDwtIHJlZ2lvbk0yMF8xNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtMjBfY2FzZXNfbTE1cGx1cyA8LSByZWdpb25NMjBfMTVwbHVzICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShuYS5vbWl0KGNhc2VzKSkpCm1lcmdlMjBfbTE1cGx1cyA8LSBjYmluZChzdW0yMF9iZXN0X20xNXBsdXMsIHN1bTIwX2xvX20xNXBsdXMkdG90YWwsIHN1bTIwX2hpX20xNXBsdXMkdG90YWwsIHN1bTIwX2Nhc2VzX20xNXBsdXMkdG90YWwpCmNvbG5hbWVzKG1lcmdlMjBfbTE1cGx1cykgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgpzdW0yMF9iZXN0X2YxNXBsdXMgPC0gcmVnaW9uRjIwXzE1cGx1cyAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVzdCkpCnN1bTIwX2xvX2YxNXBsdXMgPC0gcmVnaW9uRjIwXzE1cGx1cyAlPiUgZ3JvdXBfYnkoZ193aG9yZWdpb24pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0obG8pKQpzdW0yMF9oaV9mMTVwbHVzIDwtIHJlZ2lvbkYyMF8xNXBsdXMgJT4lIGdyb3VwX2J5KGdfd2hvcmVnaW9uKSAlPiUgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGhpKSkKc3VtMjBfY2FzZXNfZjE1cGx1cyA8LSByZWdpb25GMjBfMTVwbHVzICU+JSBncm91cF9ieShnX3dob3JlZ2lvbikgJT4lIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShuYS5vbWl0KGNhc2VzKSkpCm1lcmdlMjBfZjE1cGx1cyA8LSBjYmluZChzdW0yMF9iZXN0X2YxNXBsdXMsIHN1bTIwX2xvX2YxNXBsdXMkdG90YWwsIHN1bTIwX2hpX2YxNXBsdXMkdG90YWwsIHN1bTIwX2Nhc2VzX2YxNXBsdXMkdG90YWwpCmNvbG5hbWVzKG1lcmdlMjBfZjE1cGx1cykgPC0gYygiZ193aG9yZWdpb24iLCAiYmVzdCIsICJsbyIsICJoaSIsICJjYXNlcyIpCgoKI0RyYXdpbmcgYm94IHBsb3RzIGZvciAyMDIwCgpwaXYyMF9tMDQgPC0gcGl2b3RfbG9uZ2VyKG1lcmdlMjBfbTA0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpib3gyMF9tMDQgPC0gYm94cGxvdCh2YWx1ZSB+IGdfd2hvcmVnaW9uLCBwaXYyMF9tMDQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gbWVyZ2UyMF9tMDQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCnBpdjIwX2YwNCA8LSBwaXZvdF9sb25nZXIobWVyZ2UyMF9mMDQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDIwX2YwNCA8LSBib3hwbG90KHZhbHVlIH4gZ193aG9yZWdpb24sIHBpdjIwX2YwNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTIwX2YwNCRjYXNlcywKICAgICAgIHkgPSAxOjYsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKcGl2MjBfbTUxNCA8LSBwaXZvdF9sb25nZXIobWVyZ2UyMF9tNTE0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpib3gyMF9tNTE0IDwtIGJveHBsb3QodmFsdWUgfiBnX3dob3JlZ2lvbiwgcGl2MjBfbTUxNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTIwX201MTQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCnBpdjIwX2Y1MTQgPC0gcGl2b3RfbG9uZ2VyKG1lcmdlMjBfZjUxNCwgY29scyA9IGMoImJlc3QiLCAibG8iLCAiaGkiKSwgbmFtZXNfdG8gPSAiZXN0IikKYm94MjBfZjUxNCA8LSBib3hwbG90KHZhbHVlIH4gZ193aG9yZWdpb24sIHBpdjIwX2Y1MTQsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gbWVyZ2UyMF9mNTE0JGNhc2VzLAogICAgICAgeSA9IDE6NiwKICAgICAgIGNvbCA9ICJyZWQiLAogICAgICAgcGNoID0gMTYpCgpwaXYyMF9tMDE0IDwtIHBpdm90X2xvbmdlcihtZXJnZTIwX20wMTQsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDIwX20wMTQgPC0gYm94cGxvdCh2YWx1ZSB+IGdfd2hvcmVnaW9uLCBwaXYyMF9tMDE0LCBob3Jpem9udGFsID0gVFJVRSwgbGFzID0gMSwgY2V4Lm5hbWVzID0gMC41KQpwb2ludHMoeCA9IG1lcmdlMjBfbTAxNCRjYXNlcywKICAgICAgIHkgPSAxOjYsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKcGl2MjBfZjAxNCA8LSBwaXZvdF9sb25nZXIobWVyZ2UyMF9mMDE0LCBjb2xzID0gYygiYmVzdCIsICJsbyIsICJoaSIpLCBuYW1lc190byA9ICJlc3QiKQpib3gyMF9mMDE0IDwtIGJveHBsb3QodmFsdWUgfiBnX3dob3JlZ2lvbiwgcGl2MjBfZjAxNCwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcyA9IDEsIGNleC5uYW1lcyA9IDAuNSkKcG9pbnRzKHggPSBtZXJnZTIwX2YwMTQkY2FzZXMsCiAgICAgICB5ID0gMTo2LAogICAgICAgY29sID0gInJlZCIsCiAgICAgICBwY2ggPSAxNikKCnBpdjIwX20xNXBsdXMgPC0gcGl2b3RfbG9uZ2VyKG1lcmdlMjBfbTE1cGx1cywgY29scyA9IGMoImJlc3QiLCAibG8iLCAiaGkiKSwgbmFtZXNfdG8gPSAiZXN0IikKYm94MjBfbTE1cGx1cyA8LSBib3hwbG90KHZhbHVlIH4gZ193aG9yZWdpb24sIHBpdjIwX20xNXBsdXMsIGhvcml6b250YWwgPSBUUlVFLCBsYXMgPSAxLCBjZXgubmFtZXMgPSAwLjUpCnBvaW50cyh4ID0gbWVyZ2UyMF9tMTVwbHVzJGNhc2VzLAogICAgICAgeSA9IDE6NiwKICAgICAgIGNvbCA9ICJyZWQiLAogICAgICAgcGNoID0gMTYpCgpwaXYyMF9mMTVwbHVzIDwtIHBpdm90X2xvbmdlcihtZXJnZTIwX2YxNXBsdXMsIGNvbHMgPSBjKCJiZXN0IiwgImxvIiwgImhpIiksIG5hbWVzX3RvID0gImVzdCIpCmJveDIwX2YxNXBsdXMgPC0gYm94cGxvdCh2YWx1ZSB+IGdfd2hvcmVnaW9uLCBwaXYyMF9mMTVwbHVzLCBob3Jpem9udGFsID0gVFJVRSwgbGFzID0gMSwgY2V4Lm5hbWVzID0gMC41KQpwb2ludHMoeCA9IG1lcmdlMjBfZjE1cGx1cyRjYXNlcywKICAgICAgIHkgPSAxOjYsCiAgICAgICBjb2wgPSAicmVkIiwKICAgICAgIHBjaCA9IDE2KQoKYGBgCgpDcmVhdGluZyBjb21pYm5lZCBkYXRhIGZyYW1lIGNvbXBhcmluZyAyMDE5IGFuZCAyMDIwIGRhdGEgCgpgYGB7cn0KI0FnZSAwNCBzaWRlLWJ5LXNpZGUKc2V4TSA8LSAibWFsZSIKbWVyZ19tMDQgPC0gbWVyZ2UocGl2dG90X20wNCwgcGl2MjBfbTA0LCBieSA9IGMoImdfd2hvcmVnaW9uIiwgImVzdCIpLCBhbGwueCA9IFRSVUUpCmNvbG5hbWVzKG1lcmdfbTA0KSA8LSBjKCJnX3dob3JlZ2lvbiIsICJlc3QiLCAiY2FzZV8yMDE5IiwgImVzdF8yMDE5IiwgImNhc2VfMjAyMCIsICJlc3RfMjAyMCIpCm1lcmdfbTA0IDwtIGNiaW5kKG1lcmdfbTA0LCBzZXhNKQpjb2xuYW1lcyhtZXJnX20wNClbY29sbmFtZXMobWVyZ19tMDQpID09ICJzZXhNIl0gPC0gInNleCIKCnNleEYgPC0gImZlbWFsZSIKbWVyZ19mMDQgPC0gbWVyZ2UocGl2dG90X2YwNCwgcGl2MjBfZjA0LCBieSA9IGMoImdfd2hvcmVnaW9uIiwgImVzdCIpLCBhbGwueCA9IFRSVUUpCmNvbG5hbWVzKG1lcmdfZjA0KSA8LSBjKCJnX3dob3JlZ2lvbiIsICJlc3QiLCAiY2FzZV8yMDE5IiwgImVzdF8yMDE5IiwgImNhc2VfMjAyMCIsICJlc3RfMjAyMCIpCm1lcmdfZjA0IDwtIGNiaW5kKG1lcmdfZjA0LCBzZXhGKQpjb2xuYW1lcyhtZXJnX2YwNClbY29sbmFtZXMobWVyZ19mMDQpID09ICJzZXhGIl0gPC0gInNleCIKCm1lcmdlZF8wNCA8LSByYmluZChtZXJnX20wNCwgbWVyZ19mMDQpCm1lcmdlZF8wNDQgPC0gbWVyZ2VkXzA0WywgLWMoMyw1KV0KbG9uZ18wNCA8LSBwaXZvdF9sb25nZXIobWVyZ2VkXzA0NCwgY29scyA9IGMoImVzdF8yMDE5IiwgImVzdF8yMDIwIikpCgpnZ190cnkwNCA8LSBnZ3Bsb3QobG9uZ18wNCwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IHZhbHVlLCBjb2xvciA9IG5hbWUpKSArIGdlb21fYm94cGxvdCgpICsgZmFjZXRfd3JhcCh+bG9uZ18wNCRzZXgpCgojQWdlIDUtMTQgc2lkZS1ieS1zaWRlCnNleE0gPC0gIm1hbGUiCm1lcmdfbTUxNCA8LSBtZXJnZShwaXZ0b3RfbTUxNCwgcGl2MjBfbTUxNCwgYnkgPSBjKCJnX3dob3JlZ2lvbiIsICJlc3QiKSwgYWxsLnggPSBUUlVFKQpjb2xuYW1lcyhtZXJnX201MTQpIDwtIGMoImdfd2hvcmVnaW9uIiwgImVzdCIsICJjYXNlXzIwMTkiLCAiZXN0XzIwMTkiLCAiY2FzZV8yMDIwIiwgImVzdF8yMDIwIikKbWVyZ19tNTE0IDwtIGNiaW5kKG1lcmdfbTUxNCwgc2V4TSkKY29sbmFtZXMobWVyZ19tNTE0KVtjb2xuYW1lcyhtZXJnX201MTQpID09ICJzZXhNIl0gPC0gInNleCIKCnNleEYgPC0gImZlbWFsZSIKbWVyZ19mNTE0IDwtIG1lcmdlKHBpdnRvdF9mNTE0LCBwaXYyMF9mNTE0LCBieSA9IGMoImdfd2hvcmVnaW9uIiwgImVzdCIpLCBhbGwueCA9IFRSVUUpCmNvbG5hbWVzKG1lcmdfZjUxNCkgPC0gYygiZ193aG9yZWdpb24iLCAiZXN0IiwgImNhc2VfMjAxOSIsICJlc3RfMjAxOSIsICJjYXNlXzIwMjAiLCAiZXN0XzIwMjAiKQptZXJnX2Y1MTQgPC0gY2JpbmQobWVyZ19mNTE0LCBzZXhGKQpjb2xuYW1lcyhtZXJnX2Y1MTQpW2NvbG5hbWVzKG1lcmdfZjUxNCkgPT0gInNleEYiXSA8LSAic2V4IgoKbWVyZ2VkXzUxNCA8LSByYmluZChtZXJnX201MTQsIG1lcmdfZjUxNCkKbWVyZ2VkXzUxNDQgPC0gbWVyZ2VkXzUxNFssIC1jKDMsNSldCmxvbmdfNTE0IDwtIHBpdm90X2xvbmdlcihtZXJnZWRfNTE0NCwgY29scyA9IGMoImVzdF8yMDE5IiwgImVzdF8yMDIwIikpCgpnZ190cnk1MTQgPC0gZ2dwbG90KGxvbmdfNTE0LCBhZXMoeCA9IGdfd2hvcmVnaW9uLCB5ID0gdmFsdWUsIGNvbG9yID0gbmFtZSkpICsgZ2VvbV9ib3hwbG90KCkgKyBmYWNldF93cmFwKH5sb25nXzUxNCRzZXgpCgojQWdlIDE1IHBsdXMgc2lkZS1ieS1zaWRlCnNleE0gPC0gIm1hbGUiCm1lcmdfbTE1cGx1cyA8LSBtZXJnZShwaXZ0b3RfbTE1cGx1cywgcGl2MjBfbTE1cGx1cywgYnkgPSBjKCJnX3dob3JlZ2lvbiIsICJlc3QiKSwgYWxsLnggPSBUUlVFKQpjb2xuYW1lcyhtZXJnX20xNXBsdXMpIDwtIGMoImdfd2hvcmVnaW9uIiwgImVzdCIsICJjYXNlXzIwMTkiLCAiZXN0XzIwMTkiLCAiY2FzZV8yMDIwIiwgImVzdF8yMDIwIikKbWVyZ19tMTVwbHVzIDwtIGNiaW5kKG1lcmdfbTE1cGx1cywgc2V4TSkKY29sbmFtZXMobWVyZ19tMTVwbHVzKVtjb2xuYW1lcyhtZXJnX20xNXBsdXMpID09ICJzZXhNIl0gPC0gInNleCIKCnNleEYgPC0gImZlbWFsZSIKbWVyZ19mMTVwbHVzIDwtIG1lcmdlKHBpdnRvdF9mMTVwbHVzLCBwaXYyMF9mMTVwbHVzLCBieSA9IGMoImdfd2hvcmVnaW9uIiwgImVzdCIpLCBhbGwueCA9IFRSVUUpCmNvbG5hbWVzKG1lcmdfZjE1cGx1cykgPC0gYygiZ193aG9yZWdpb24iLCAiZXN0IiwgImNhc2VfMjAxOSIsICJlc3RfMjAxOSIsICJjYXNlXzIwMjAiLCAiZXN0XzIwMjAiKQptZXJnX2YxNXBsdXMgPC0gY2JpbmQobWVyZ19mMTVwbHVzLCBzZXhGKQpjb2xuYW1lcyhtZXJnX2YxNXBsdXMpW2NvbG5hbWVzKG1lcmdfZjE1cGx1cykgPT0gInNleEYiXSA8LSAic2V4IgoKbWVyZ2VkXzE1cGx1cyA8LSByYmluZChtZXJnX20xNXBsdXMsIG1lcmdfZjE1cGx1cykKbWVyZ2VkXzE1cGx1czQgPC0gbWVyZ2VkXzE1cGx1c1ssIC1jKDMsNSldCmxvbmdfMTVwbHVzIDwtIHBpdm90X2xvbmdlcihtZXJnZWRfMTVwbHVzNCwgY29scyA9IGMoImVzdF8yMDE5IiwgImVzdF8yMDIwIikpCgpnZ190cnkxNXBsdXMgPC0gZ2dwbG90KGxvbmdfMTVwbHVzLCBhZXMoeCA9IGdfd2hvcmVnaW9uLCB5ID0gdmFsdWUsIGNvbG9yID0gbmFtZSkpICsgZ2VvbV9ib3hwbG90KCkgKyBmYWNldF93cmFwKH5sb25nXzE1cGx1cyRzZXgpIAoKCmBgYAoKQ3JlYXRpbmcgZGF0YSBmcmFtZSB0byBvdmVybGF5IHRoZSBjYXNlIGRhdGEgZm9yIGVhY2ggZ3JhcGggCgpgYGB7cn0KY2FzZXNfMDQgPC0gbWVyZ2VkXzA0WywgLWMoMiwgNCw2KV0KY2FzZV9yZWFkeTA0IDwtIHBpdm90X2xvbmdlcihjYXNlc18wNCwgY29scyA9IGMoImNhc2VfMjAxOSIsICJjYXNlXzIwMjAiKSkKCm5vX2R1cHMwNCA8LSBjYXNlX3JlYWR5MDRbIWR1cGxpY2F0ZWQoY2FzZV9yZWFkeTA0KSxdCgpnZ190cnkwNCA8LSBnZ3Bsb3QobG9uZ18wNCwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IHZhbHVlLCBjb2xvciA9IG5hbWUpKSArIGdlb21fYm94cGxvdCgpICsgZmFjZXRfd3JhcCh+bG9uZ18wNCRzZXgpCgoKZ2dfYWxvbmUgPC0gZ2dwbG90KG5vX2R1cHMwNCwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IHZhbHVlLCBjb2xvciA9IG5hbWUpKSArIGdlb21fcG9pbnQoKSArIGZhY2V0X3dyYXAofm5vX2R1cHMwNCRzZXgpCgpnZ190cnkwNSA8LSBnZ3Bsb3QobG9uZ18wNCwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IHZhbHVlLCBjb2xvciA9IG5hbWUpKSArIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludChkYXRhID0gbm9fZHVwczA0LCBhZXMoeCA9IGdfd2hvcmVnaW9uLCB5ID0gdmFsdWUsIGNvbG9yID0gbmFtZSksIGluaGVyaXQuYWVzID0gKSAgKyBmYWNldF93cmFwKH5sb25nXzA0JHNleCkKCgojIyNUcnlpbmcgYWdhaW4gCm1lcmdlZF8wNSA8LSBtZXJnZWRfMDRbLCAtMl0KaW5jbF9jYXNlIDwtIHBpdm90X2xvbmdlcihtZXJnZWRfMDUsIGNvbHMgPSBjKCJlc3RfMjAxOSIsICJlc3RfMjAyMCIpKQppbmNsX2Nhc2UyIDwtIHBpdm90X2xvbmdlcihpbmNsX2Nhc2UsIGNvbHMgPSBjKCJjYXNlXzIwMTkiLCAiY2FzZV8yMDIwIiksIHZhbHVlc190byA9ICJjYXNlcyIsIG5hbWVzX3JlcGFpcj0gInVuaXF1ZSIpCmNvbG5hbWVzKGluY2xfY2FzZTIpIDwtIGMoImdfd2hvcmVnaW9uIiwgInNleCIsICJlc3QiLCAiZXN0X3ZhbHVlIiwgImNhc2UiLCAiY2FzZV92YWx1ZSIpCgpnZ19pbmNsMDQgPC0gZ2dwbG90KGluY2xfY2FzZTIsIGFlcyh4ID0gZ193aG9yZWdpb24sIHkgPSBlc3RfdmFsdWUsIGNvbG9yID0gZXN0KSkgKyBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IGNhc2VfdmFsdWUsIGNvbG9yID0gY2FzZSkpICsgZmFjZXRfd3JhcCh+aW5jbF9jYXNlMiRzZXgpICsgbGFicyh0aXRsZSA9ICIyMDE5IHZzIDIwMjAgZXN0aW1hdGUgYW5kIG5vdGlmaWNhdGlvbiBkYXRhIGZvciAwLTQgeXJzIikKCmdnX2luY2wwNAoKIyNUcnlpbmc1LTE0IAptZXJnZWRfNTE0X3JlYWR5IDwtIG1lcmdlZF81MTRbLCAtMl0KaW5jbF9jYXNlNTE0IDwtIHBpdm90X2xvbmdlcihtZXJnZWRfNTE0X3JlYWR5LCBjb2xzID0gYygiZXN0XzIwMTkiLCAiZXN0XzIwMjAiKSkKaW5jbF9jYXNlNTE0MiA8LSBwaXZvdF9sb25nZXIoaW5jbF9jYXNlNTE0LCBjb2xzID0gYygiY2FzZV8yMDE5IiwgImNhc2VfMjAyMCIpLCB2YWx1ZXNfdG8gPSAiY2FzZXMiLCBuYW1lc19yZXBhaXI9ICJ1bmlxdWUiKQpjb2xuYW1lcyhpbmNsX2Nhc2U1MTQyKSA8LSBjKCJnX3dob3JlZ2lvbiIsICJzZXgiLCAiZXN0IiwgImVzdF92YWx1ZSIsICJjYXNlIiwgImNhc2VfdmFsdWUiKQoKZ2dfaW5jbDUxNCA8LSBnZ3Bsb3QoaW5jbF9jYXNlNTE0MiwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IGVzdF92YWx1ZSwgY29sb3IgPSBlc3QpKSArIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludChhZXMoeCA9IGdfd2hvcmVnaW9uLCB5ID0gY2FzZV92YWx1ZSwgY29sb3IgPSBjYXNlKSkgKyBmYWNldF93cmFwKH5pbmNsX2Nhc2U1MTQyJHNleCkgKyBsYWJzKHRpdGxlID0gIjIwMTkgdnMgMjAyMCBlc3RpbWF0ZSBhbmQgbm90aWZpY2F0aW9uIGRhdGEgZm9yIDUtMTQgeXJzIikKZ2dfaW5jbDUxNAoKI1RyeWluZyAxNXBsdXMKbWVyZ2VkXzE1cGx1c19yZWFkeSA8LSBtZXJnZWRfMTVwbHVzWywgLTJdCmluY2xfY2FzZTE1cGx1cyA8LSBwaXZvdF9sb25nZXIobWVyZ2VkXzE1cGx1c19yZWFkeSwgY29scyA9IGMoImVzdF8yMDE5IiwgImVzdF8yMDIwIikpCmluY2xfY2FzZTE1cGx1czIgPC0gcGl2b3RfbG9uZ2VyKGluY2xfY2FzZTE1cGx1cywgY29scyA9IGMoImNhc2VfMjAxOSIsICJjYXNlXzIwMjAiKSwgdmFsdWVzX3RvID0gImNhc2VzIiwgbmFtZXNfcmVwYWlyPSAidW5pcXVlIikKY29sbmFtZXMoaW5jbF9jYXNlMTVwbHVzMikgPC0gYygiZ193aG9yZWdpb24iLCAic2V4IiwgImVzdCIsICJlc3RfdmFsdWUiLCAiY2FzZSIsICJjYXNlX3ZhbHVlIikKCmdnX2luY2wxNXBsdXMgPC0gZ2dwbG90KGluY2xfY2FzZTE1cGx1czIsIGFlcyh4ID0gZ193aG9yZWdpb24sIHkgPSBlc3RfdmFsdWUsIGNvbG9yID0gZXN0KSkgKyBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IGNhc2VfdmFsdWUsIGNvbG9yID0gY2FzZSkpICsgZmFjZXRfd3JhcCh+aW5jbF9jYXNlMTVwbHVzMiRzZXgpICsgbGFicyh0aXRsZSA9ICIyMDE5IHZzIDIwMjAgZXN0aW1hdGUgYW5kIG5vdGlmaWNhdGlvbiBkYXRhIGZvciAxNXBsdXMgeXJzIikKZ2dfaW5jbDE1cGx1cwoKCmBgYAo=